> For the complete documentation index, see [llms.txt](https://artiva.gitbook.io/v2-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://artiva.gitbook.io/v2-docs/protocol/data-schemas.md).

# Data Schemas

## Metadata

Artiva platform metadata currently conforms to the following schema.

{% code lineNumbers="true" %}

```javascript
type Navigation = {
  label: string;
  url: string;
  secondary: boolean;
};

type Tag = {
  name: string;
  color: string;
  slug: string;
  description: string;
  image_url: string;
};

type CustomProperty = {
  type: "boolean" | "text" | "select" | "color" | "image";
  options?: string[];
  default?: any;
  group?: "homepage" | "post";
};

type Platform = {
  title: string;
  description: string;
  logo?: string;
  icon?: string;
  themeURL?: string;
  accent_color?: string;
  cover_image?: string;
  codeinjection_head?: string;
  codeinjection_foot?: string;
  navigation?: Navigation[];
  tags?: Tag[];
  timezone?: string;
  locale?: string;
  meta_title?: string;
  meta_description?: string;
  twitter_image?: string;
  twitter_title?: string;
  twitter_description?: string;
  og_image?: string;
  og_title?: string;
  og_description?: string;
  url?: string;
  custom: {
    [key: string]: CustomProperty;
  };
};
```

{% endcode %}

## Post

Artiva post data conforms to the following schema

```javascript
type ChainIdentifier = "ETHEREUM" | "POLYGON";

type NFTIdentifier = {
  chain: ChainIdentifier;
  contractAddress: string;
  tokenId: string;
};

type NFTContractIdentifier = {
  chain: ChainIdentifier;
  contractAddress: string;
};

type PostContent = NFTIdentifier | NFTContractIdentifier;

enum PostTypeEnum {
  NFT = "nft",
  NFT_CONTRACT = "nftContract",
}

type Post = {
  id: string;
  content: PostContent;
  type: PostTypeEnum;
  tags?: string[];
};
```
