Draftn.io docs · api
Referência

Modelos de dados

Referência canônica dos objetos da API pública. Cada modelo lista os campos exatamente como aparecem na especificação. No fim da página há um arquivo types.ts pronto para copiar.

Post

Objeto principal de conteúdo. Retornado por todos os endpoints de Posts; também aninhado em listagens por categoria e tag.

idstring
Identificador único do post.
titlestring
Título do post.
subtitlestring
Subtítulo.
contentstring
Corpo em HTML ou Markdown.
slugstring
Identificador legível usado em URLs.
statusenum
Um de DRAFT, PUBLISHED, SCHEDULED. Nos endpoints públicos é sempre PUBLISHED.
publishedAtstring · date-timenullable
Data/hora de publicação (ISO 8601, UTC).
scheduledAtstring · date-timenullable
Data/hora de agendamento.
blogIdstring
ID do blog dono do post.
authorIdstring
ID do autor.
createdAtstring · date-time
Data/hora de criação.
updatedAtstring · date-time
Data/hora da última atualização.
categoriesCategory[]
Categorias associadas.
tagsTag[]
Tags associadas.

Category

Tema do blog. Retornado pelos endpoints de Categorias e aninhado em Post.categories.

idstring
Identificador único.
namestring
Nome de exibição.
descriptionstring
Descrição da categoria.
blogIdstring
ID do blog dono.
createdAtstring · date-time
Data/hora de criação.
updatedAtstring · date-time
Data/hora da última atualização.
_countobject
Contém posts (integer): nº de posts na categoria.

Tag

Rótulo transversal. Retornado pelos endpoints de Tags e aninhado em Post.tags. Note que não possui description.

idstring
Identificador único.
namestring
Nome da tag.
blogIdstring
ID do blog dono.
createdAtstring · date-time
Data/hora de criação.
updatedAtstring · date-time
Data/hora da última atualização.
_countobject
Contém posts (integer): nº de posts com a tag.

PostListResponse

Envelope paginado retornado por /public/categories/{id}/posts e /public/tags/{id}/posts.

postsPost[]
Posts da página atual.
totalinteger
Total de posts disponíveis.
pageinteger
Página atual (começa em 1).
pageSizeinteger
Tamanho da página.
totalPagesinteger
Número total de páginas.

SearchResponse

Envelope da busca, com resultados e metadados.

dataSearchResultItem[]
Resultados da busca.
metaobject
Metadados: q (string), limit (integer), offset (integer), count (integer).

SearchResultItem

Item enxuto de resultado de busca (subconjunto de um post).

idstring
ID do post.
titlestring
Título.
subtitlestringnullable
Subtítulo.
slugstring
Slug do post.
coverUrlstringnullable
URL da capa.
publishedAtstring · date-timenullable
Data/hora de publicação.

AdDeliveryResult

Resultado da entrega de um anúncio. Quando não há anúncio, retorna apenas filled: false. O AdDeliverySlotResult estende este objeto com slotId e format.

filledboolean
Indica se há anúncio para o formato.
idstring · uuid
ID do anúncio entregue.
imageUrlstringnullable
URL da imagem.
linkUrlstringnullable
URL de destino.
titlestringnullable
Título do anúncio.
contentstringnullable
Texto do anúncio.
linkTextstringnullable
Rótulo da chamada para ação.
clickTokenstring
Token de clique (JWT, TTL 10 min).

AdFormat

Enumeração de formatos de anúncio. Valores: BANNER, SIDEBAR, POPUP, INLINE, NATIVE.

Error

Objeto padrão de erro (quando a resposta traz corpo). Veja Tratamento de erros.

errorstring
Identificação curta do erro.
messagestring
Descrição detalhada (quando disponível).

Tipos TypeScript

Copie para o seu projeto e importe nos exemplos das páginas de endpoints:

types.ts
// Modelos da API pública da DraftIn — prontos para reuso.

export type PostStatus = "DRAFT" | "PUBLISHED" | "SCHEDULED";
export type AdFormat = "BANNER" | "SIDEBAR" | "POPUP" | "INLINE" | "NATIVE";

export interface Category {
  id: string;
  name: string;
  description: string;
  blogId: string;
  createdAt: string;
  updatedAt: string;
  _count?: { posts: number };
}

export interface Tag {
  id: string;
  name: string;
  blogId: string;
  createdAt: string;
  updatedAt: string;
  _count?: { posts: number };
}

export interface Post {
  id: string;
  title: string;
  subtitle: string;
  content: string;
  slug: string;
  status: PostStatus; // público: sempre "PUBLISHED"
  publishedAt: string | null;
  scheduledAt: string | null;
  blogId: string;
  authorId: string;
  createdAt: string;
  updatedAt: string;
  categories: Category[];
  tags: Tag[];
}

export interface PostListResponse {
  posts: Post[];
  total: number;
  page: number;
  pageSize: number;
  totalPages: number;
}

export interface SearchResultItem {
  id: string;
  title: string;
  subtitle: string | null;
  slug: string;
  coverUrl: string | null;
  publishedAt: string | null;
}

export interface SearchResponse {
  data: SearchResultItem[];
  meta: { q: string; limit: number; offset: number; count: number };
}

export interface AdDeliveryResult {
  filled: boolean;
  id?: string;
  imageUrl?: string | null;
  linkUrl?: string | null;
  title?: string | null;
  content?: string | null;
  linkText?: string | null;
  clickToken?: string;
}

export interface AdDeliverySlotResult extends AdDeliveryResult {
  slotId: string;
  format: AdFormat;
}

export interface ApiError {
  error: string;
  message?: string;
}