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.
DRAFT, PUBLISHED, SCHEDULED. Nos endpoints públicos é sempre PUBLISHED.Category
Tema do blog. Retornado pelos endpoints de Categorias e aninhado em Post.categories.
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.
posts (integer): nº de posts com a tag.PostListResponse
Envelope paginado retornado por /public/categories/{id}/posts e /public/tags/{id}/posts.
SearchResponse
Envelope da busca, com resultados e metadados.
q (string), limit (integer), offset (integer), count (integer).SearchResultItem
Item enxuto de resultado de busca (subconjunto de um post).
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.
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.
Tipos TypeScript
Copie para o seu projeto e importe nos exemplos das páginas de endpoints:
// 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;
}