Nuvelics documentation
APIAPI reference

Brand kits

Manage the brand kits that set how your outputs look (colours, typefaces, logo and motion), and find and copy the Google fonts a kit can use.

GET
/api/tenant/v1/brand-kits

Authorization

headerx-api-key<token>

A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.

Query Parameters

isActive?string

Narrow the list to active (true) or retired (false) kits

Value in"true""false"
newsdeskId?string

Narrow the list to kits scoped to this desk, plus every kit scoped to no desk

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$

Response Body

The org's brand kits, narrowed by any filters supplied

application/json
  1. response
items*array<>
Example Request
curl -X GET 'https://api.nuvelics.com/api/tenant/v1/brand-kits'
Example Response
{  "items": [    {      "id": "string",      "orgId": "string",      "newsdeskId": "string",      "isDefault": true,      "isActive": true,      "createdAt": "2019-08-24T14:15:22Z",      "name": "string",      "colors": {        "background": "string",        "backgroundText": "string",        "surface": "string",        "surfaceText": "string",        "accent": "string",        "accentText": "string"      },      "typography": {        "display": {          "source": "google",          "fontId": "string",          "maxWeight": 400        },        "body": {          "source": "google",          "fontId": "string",          "maxWeight": 400        }      },      "logo": {        "onLightAssetId": "string",        "onDarkAssetId": "string",        "cardGroundAssetId": "string",        "placement": "topLeft",        "marginPct": 0      },      "motion": {        "introStingerAssetId": "string",        "outroStingerAssetId": "string"      },      "captionScrimOpacity": 0,      "assetUrls": {        "property1": "http://example.com",        "property2": "http://example.com"      },      "assetContentTypes": {},      "faces": {        "display": {          "source": "google",          "id": "string",          "family": "string",          "weights": {            "min": 0,            "max": 0          },          "maxWeight": 400,          "url": "http://example.com"        },        "body": {          "source": "google",          "id": "string",          "family": "string",          "weights": {            "min": 0,            "max": 0          },          "maxWeight": 400,          "url": "http://example.com"        }      }    }  ]}

Create a brand kit

POST
/api/tenant/v1/brand-kits

Authorization

headerx-api-key<token>

A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.

Request Body

application/json
  1. body
name*string

Brand display name, e.g. the masthead

Length1 <= length <= 120
colors*
typography*
logo*
motion*
captionScrimOpacity?number

Opacity of the surface panel a caption sits on when composited over footage; text is never set on footage alone

Range0 <= value <= 1
Default0.85
newsdeskId*string

Newsdesk identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$

Response Body

Brand kit created

application/json
  1. response
id*string

Brand kit identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
orgId*string

Owning organization identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
newsdeskId*string

Desk this kit is scoped to; null means it is the org's

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
isDefault*boolean

Whether this is the default kit for its scope

isActive*boolean

Whether the kit is offered on the output template picker

createdAt*string

ISO 8601 creation timestamp

Formatdate-time
name*string

Brand display name, e.g. the masthead

Length1 <= length <= 120
colors*
typography*
logo*
motion*
captionScrimOpacity*number

Opacity of the surface panel a caption sits on when composited over footage; text is never set on footage alone

Range0 <= value <= 1
assetUrls*

Freshly signed, short-lived GET URLs for the kit's assets, keyed by asset id

assetContentTypes?

The stored content type of each asset in assetUrls, keyed by asset id

Default{}
faces*

The kit's display and body faces, resolved from their references

Example Request
curl -X POST 'https://api.nuvelics.com/api/tenant/v1/brand-kits' \  -H 'Content-Type: application/json' \  -d '{  "name": "string",  "colors": {    "background": "string",    "backgroundText": "string",    "surface": "string",    "surfaceText": "string",    "accent": "string",    "accentText": "string"  },  "typography": {    "display": {      "source": "google",      "fontId": "string"    },    "body": {      "source": "google",      "fontId": "string"    }  },  "logo": {    "placement": "topLeft",    "marginPct": 0  },  "motion": {},  "newsdeskId": "string"}'
Example Response
{  "id": "string",  "orgId": "string",  "newsdeskId": "string",  "isDefault": true,  "isActive": true,  "createdAt": "2019-08-24T14:15:22Z",  "name": "string",  "colors": {    "background": "string",    "backgroundText": "string",    "surface": "string",    "surfaceText": "string",    "accent": "string",    "accentText": "string"  },  "typography": {    "display": {      "source": "google",      "fontId": "string",      "maxWeight": 400    },    "body": {      "source": "google",      "fontId": "string",      "maxWeight": 400    }  },  "logo": {    "onLightAssetId": "string",    "onDarkAssetId": "string",    "cardGroundAssetId": "string",    "placement": "topLeft",    "marginPct": 0  },  "motion": {    "introStingerAssetId": "string",    "outroStingerAssetId": "string"  },  "captionScrimOpacity": 0,  "assetUrls": {    "property1": "http://example.com",    "property2": "http://example.com"  },  "assetContentTypes": {},  "faces": {    "display": {      "source": "google",      "id": "string",      "family": "string",      "weights": {        "min": 0,        "max": 0      },      "maxWeight": 400,      "url": "http://example.com"    },    "body": {      "source": "google",      "id": "string",      "family": "string",      "weights": {        "min": 0,        "max": 0      },      "maxWeight": 400,      "url": "http://example.com"    }  }}
GET
/api/tenant/v1/brand-kits/font-catalog

Authorization

headerx-api-key<token>

A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.

Response Body

The Google font catalog, most popular first, without file URLs

application/json
  1. response
items*array<>
Example Request
curl -X GET 'https://api.nuvelics.com/api/tenant/v1/brand-kits/font-catalog'
Example Response
{  "items": [    {      "family": "string",      "category": "string",      "subsets": [        "string"      ],      "variable": true,      "weights": [        1      ],      "rank": 1    }  ]}
POST
/api/tenant/v1/brand-kits/fonts/google

Authorization

headerx-api-key<token>

A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.

Request Body

application/json
  1. body
family*string

Family name exactly as the font catalog lists it

Length1 <= length <= 120
role*string

Which kit face the copy is for; picks the weight of a static family

Value in"display""body"

Response Body

The font file a kit face names, copied now or earlier

application/json
  1. response
fontId*string

The Google font file's id, what a kit's google face references

Length1 <= length
family*string
Length1 <= length
weights*
url*string

A signed, expiring URL for the file

Length1 <= length
Example Request
curl -X POST 'https://api.nuvelics.com/api/tenant/v1/brand-kits/fonts/google' \  -H 'Content-Type: application/json' \  -d '{  "family": "string",  "role": "display"}'
Example Response
{  "fontId": "string",  "family": "string",  "weights": {    "min": 0,    "max": 0  },  "url": "string"}
GET
/api/tenant/v1/brand-kits/default-faces

Authorization

headerx-api-key<token>

A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.

Response Body

The faces a new kit starts on, each with a signed URL for its file

application/json
  1. response

The kit's display and body faces, resolved from their references

display*
body*
Example Request
curl -X GET 'https://api.nuvelics.com/api/tenant/v1/brand-kits/default-faces'
Example Response
{  "display": {    "source": "google",    "id": "string",    "family": "string",    "weights": {      "min": 0,      "max": 0    },    "maxWeight": 400,    "url": "http://example.com"  },  "body": {    "source": "google",    "id": "string",    "family": "string",    "weights": {      "min": 0,      "max": 0    },    "maxWeight": 400,    "url": "http://example.com"  }}

Get a brand kit

GET
/api/tenant/v1/brand-kits/{id}

Authorization

headerx-api-key<token>

A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.

Path Parameters

id*string

Brand kit identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$

Response Body

The brand kit.

application/json
  1. response
id*string

Brand kit identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
orgId*string

Owning organization identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
newsdeskId*string

Desk this kit is scoped to; null means it is the org's

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
isDefault*boolean

Whether this is the default kit for its scope

isActive*boolean

Whether the kit is offered on the output template picker

createdAt*string

ISO 8601 creation timestamp

Formatdate-time
name*string

Brand display name, e.g. the masthead

Length1 <= length <= 120
colors*
typography*
logo*
motion*
captionScrimOpacity*number

Opacity of the surface panel a caption sits on when composited over footage; text is never set on footage alone

Range0 <= value <= 1
assetUrls*

Freshly signed, short-lived GET URLs for the kit's assets, keyed by asset id

assetContentTypes?

The stored content type of each asset in assetUrls, keyed by asset id

Default{}
faces*

The kit's display and body faces, resolved from their references

Example Request
curl -X GET 'https://api.nuvelics.com/api/tenant/v1/brand-kits/string'
Example Response
{  "id": "string",  "orgId": "string",  "newsdeskId": "string",  "isDefault": true,  "isActive": true,  "createdAt": "2019-08-24T14:15:22Z",  "name": "string",  "colors": {    "background": "string",    "backgroundText": "string",    "surface": "string",    "surfaceText": "string",    "accent": "string",    "accentText": "string"  },  "typography": {    "display": {      "source": "google",      "fontId": "string",      "maxWeight": 400    },    "body": {      "source": "google",      "fontId": "string",      "maxWeight": 400    }  },  "logo": {    "onLightAssetId": "string",    "onDarkAssetId": "string",    "cardGroundAssetId": "string",    "placement": "topLeft",    "marginPct": 0  },  "motion": {    "introStingerAssetId": "string",    "outroStingerAssetId": "string"  },  "captionScrimOpacity": 0,  "assetUrls": {    "property1": "http://example.com",    "property2": "http://example.com"  },  "assetContentTypes": {},  "faces": {    "display": {      "source": "google",      "id": "string",      "family": "string",      "weights": {        "min": 0,        "max": 0      },      "maxWeight": 400,      "url": "http://example.com"    },    "body": {      "source": "google",      "id": "string",      "family": "string",      "weights": {        "min": 0,        "max": 0      },      "maxWeight": 400,      "url": "http://example.com"    }  }}
PATCH
/api/tenant/v1/brand-kits/{id}

Authorization

headerx-api-key<token>

A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.

Path Parameters

id*string

Brand kit identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$

Request Body

application/json
  1. body
name?string

Brand display name, e.g. the masthead

Length1 <= length <= 120
newsdeskId?string

Newsdesk identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
isDefault?boolean
isActive?boolean
colors?
typography?
logo?
motion?
captionScrimOpacity?number

Opacity of the surface panel a caption sits on when composited over footage; text is never set on footage alone

Range0 <= value <= 1

Response Body

Brand kit updated

application/json
  1. response
id*string

Brand kit identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
orgId*string

Owning organization identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
newsdeskId*string

Desk this kit is scoped to; null means it is the org's

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
isDefault*boolean

Whether this is the default kit for its scope

isActive*boolean

Whether the kit is offered on the output template picker

createdAt*string

ISO 8601 creation timestamp

Formatdate-time
name*string

Brand display name, e.g. the masthead

Length1 <= length <= 120
colors*
typography*
logo*
motion*
captionScrimOpacity*number

Opacity of the surface panel a caption sits on when composited over footage; text is never set on footage alone

Range0 <= value <= 1
assetUrls*

Freshly signed, short-lived GET URLs for the kit's assets, keyed by asset id

assetContentTypes?

The stored content type of each asset in assetUrls, keyed by asset id

Default{}
faces*

The kit's display and body faces, resolved from their references

Example Request
curl -X PATCH 'https://api.nuvelics.com/api/tenant/v1/brand-kits/string' \  -H 'Content-Type: application/json' \  -d '{}'
Example Response
{  "id": "string",  "orgId": "string",  "newsdeskId": "string",  "isDefault": true,  "isActive": true,  "createdAt": "2019-08-24T14:15:22Z",  "name": "string",  "colors": {    "background": "string",    "backgroundText": "string",    "surface": "string",    "surfaceText": "string",    "accent": "string",    "accentText": "string"  },  "typography": {    "display": {      "source": "google",      "fontId": "string",      "maxWeight": 400    },    "body": {      "source": "google",      "fontId": "string",      "maxWeight": 400    }  },  "logo": {    "onLightAssetId": "string",    "onDarkAssetId": "string",    "cardGroundAssetId": "string",    "placement": "topLeft",    "marginPct": 0  },  "motion": {    "introStingerAssetId": "string",    "outroStingerAssetId": "string"  },  "captionScrimOpacity": 0,  "assetUrls": {    "property1": "http://example.com",    "property2": "http://example.com"  },  "assetContentTypes": {},  "faces": {    "display": {      "source": "google",      "id": "string",      "family": "string",      "weights": {        "min": 0,        "max": 0      },      "maxWeight": 400,      "url": "http://example.com"    },    "body": {      "source": "google",      "id": "string",      "family": "string",      "weights": {        "min": 0,        "max": 0      },      "maxWeight": 400,      "url": "http://example.com"    }  }}

Delete a brand kit

DELETE
/api/tenant/v1/brand-kits/{id}

Authorization

headerx-api-key<token>

A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.

Path Parameters

id*string

Brand kit identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$

Response Body

Brand kit deleted

Example Request
curl -X DELETE 'https://api.nuvelics.com/api/tenant/v1/brand-kits/string'
Example Response
Empty

Report a problem with this page

On this page