Documentação API
A API externa do aplicativo Inventory permite acessar seus dados de forma programática.
Visão geral
O que é a API?
A API externa é uma interface que permite que programas externos acessem os dados do aplicativo Inventory.
Casos de uso
- Automação: processamento de documentos em massa por meio de scripts
- Integração com terceiros: intercâmbio de dados com outros serviços
- Processamento em massa: criação e compartilhamento de modelos em lote
Primeiros passos
Obter uma chave de API
Para usar a API, primeiro você precisa de uma chave de API.
- No aplicativo Inventory, acesse a tela de perfil
- Localize a seção Chave de API
- Toque no botão Gerar chave
- A chave de API gerada será exibida na tela
Importante: a chave de API é exibida apenas uma vez no momento da criação. Copie-a e guarde-a em um local seguro. Em caso de perda, será necessário emitir uma nova.
Formato da chave de API
A chave de API tem o seguinte formato:
inv_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- Começa com o prefixo
inv_ - Cadeia codificada em Base64URL com cerca de 50 caracteres
Gerenciamento da chave de API
- Regenerar: revoga a chave existente e emite uma nova
- Excluir: exclui completamente a chave de API (API inutilizável)
Autenticação
Todas as solicitações à API exigem um cabeçalho Authorization.
Token Bearer
Authorization: Bearer inv_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Exemplo de solicitação
curl -H "Authorization: Bearer inv_your_api_key" \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/items"
Rate Limiting
O uso da API está sujeito a limites.
| Tipo de limite | Limite | Descrição |
|---|---|---|
| Solicitações por minuto | 60 | Prevenção de solicitações excessivas |
| Solicitações mensais | Varia por conta | Determinado por contrato |
Ao exceder o limite
- O código de status HTTP
429 Too Many Requestsé retornado - Tente novamente após uma breve espera
Endpoints da API
URL base
https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1
API de leitura (GET)
| Endpoint | Descrição |
|---|---|
GET /items |
Consultar a lista dos seus itens |
GET /items/{token} |
Consultar os detalhes de um item |
GET /templates |
Consultar a lista dos seus modelos |
GET /templates/{token} |
Consultar os detalhes de um modelo |
GET /templates/shared |
Lista de modelos em compartilhamento (remoção prevista — a função de compartilhamento termina na v3) |
GET /user/stats |
Consultar estatísticas do usuário |
API de escrita (POST)
| Endpoint | Descrição |
|---|---|
POST /templates |
Criar um novo modelo |
POST /templates/{token}/share |
Compartilhar um modelo (remoção prevista — a função de compartilhamento termina na v3) |
POST /templates/revoke |
Revogar um compartilhamento (remoção prevista — a função de compartilhamento termina na v3) |
POST /templates/{token}/send |
Enviar um modelo |
POST /templates/{token}/check-ownership |
Verificar a posse de um item clonado |
POST /templates/{token}/log |
Adicionar logs, atualizar palavras-chave/permissões/imagem |
Especificação detalhada da API
GET /items - Lista de itens
Consulta a lista de itens (documentos) de sua propriedade.
Solicitação
curl -H "Authorization: Bearer inv_xxx" \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/items?page=1&pageSize=20"
Parâmetros de consulta
| Parâmetro | Tipo | Valor padrão | Descrição |
|---|---|---|---|
| page | number | 1 | Número da página |
| pageSize | number | 20 | Itens por página (máx. 100) |
| status | string | “active” | Filtro de status (active, pending) |
| type | string | - | Filtro de tipo (paper, stamp) |
Resposta
{
"success": true,
"data": {
"items": [
{
"token": "암호화된_아이템_ID",
"title": "아이템 제목",
"content": "아이템 내용",
"type": "paper",
"status": "active",
"imageUrl": "https://...",
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
}
],
"pagination": {
"page": 1,
"pageSize": 20,
"totalItems": 50,
"totalPages": 3
}
}
}
GET /items/{token} - Detalhes de um item
Consulta as informações detalhadas de um item específico.
Solicitação
curl -H "Authorization: Bearer inv_xxx" \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/items/{token}"
Resposta
{
"success": true,
"data": {
"token": "암호화된_아이템_ID",
"title": "아이템 제목",
"content": "아이템 내용",
"type": "paper",
"status": "active",
"imageUrl": "https://...",
"keywords": ["키:값", "태그:예시"],
"createdAt": "2025-01-01T00:00:00Z",
"updatedAt": "2025-01-01T00:00:00Z"
}
}
GET /templates - Lista de modelos
Consulta a lista de modelos (carimbos) de sua propriedade.
Solicitação
curl -H "Authorization: Bearer inv_xxx" \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/templates?page=1&pageSize=20"
Parâmetros de consulta
| Parâmetro | Tipo | Valor padrão | Descrição |
|---|---|---|---|
| page | number | 1 | Número da página |
| pageSize | number | 20 | Itens por página (máx. 100) |
Resposta
{
"success": true,
"data": {
"templates": [
{
"token": "암호화된_템플릿_ID",
"title": "템플릿 제목",
"content": "템플릿 내용",
"imageUrl": "https://...",
"commentMode": "independent",
"allowComments": true,
"logPermission": "owner",
"keywordPermission": "owner",
"allowEdit": false,
"isSharing": false,
"createdAt": "2025-01-01T00:00:00Z"
}
],
"pagination": {
"page": 1,
"pageSize": 20,
"totalItems": 10,
"totalPages": 1
}
}
}
GET /templates/shared - Modelos em compartilhamento
Consulta a lista de modelos atualmente compartilhados.
Solicitação
curl -H "Authorization: Bearer inv_xxx" \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/templates/shared"
Resposta
{
"success": true,
"data": {
"sharedTemplates": [
{
"token": "암호화된_템플릿_ID",
"shareToken": "암호화된_공유_ID",
"title": "템플릿 제목",
"tags": ["TAG1", "TAG2"],
"expiresAt": "2025-01-02T00:00:00Z",
"copyCount": 5
}
]
}
}
GET /user/stats - Estatísticas do usuário
Consulta suas estatísticas de uso.
Solicitação
curl -H "Authorization: Bearer inv_xxx" \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/user/stats"
Resposta
{
"success": true,
"data": {
"email": "user@example.com",
"createdAt": "2024-01-01T00:00:00Z",
"items": {
"total": 50,
"paper": 30,
"stamp": 20
},
"api": {
"enabled": true,
"monthlyLimit": 1000,
"monthlyUsed": 150,
"lastUsedAt": "2025-01-01T12:00:00Z"
}
}
}
POST /templates - Criar um modelo
Cria um novo modelo (carimbo).
Solicitação
curl -X POST \
-H "Authorization: Bearer inv_xxx" \
-H "Content-Type: application/json" \
-d '{
"imageUrl": "https://example.com/image.png",
"title": "템플릿 제목",
"content": "템플릿 내용",
"commentMode": "independent",
"logPermission": "owner",
"keywordPermission": "owner",
"allowEdit": true,
"keywords": ["품명:노트북", "가격:$1500000KRW$"]
}' \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/templates"
Corpo da solicitação
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| imageUrl | string | Sim | URL da imagem (HTTPS recomendado) |
| title | string | Sim | Título (máx. 32 caracteres) |
| content | string | Sim | Conteúdo (máx. 1024 caracteres) |
| commentMode | string | Não | Modo de comentários: “independent” ou “shared” |
logPermission) |
|||
| logPermission | string | Não | Permissão de logs: “owner” | “author” | “none” (padrão: “owner”) |
| keywordPermission | string | Não | Permissão de palavras-chave: “owner” | “author” | “none” (padrão: “owner”) |
| allowEdit | boolean | Não | Permitir edição (padrão: true) |
| keywords | string[] | Não | Array de palavras-chave (máx. 128) |
| publishDate | string | Não | Data de início da publicação (ISO 8601) |
| validUntil | string | Não | Período de validade (ISO 8601) |
Formato das palavras-chave
As palavras-chave devem obrigatoriamente seguir o formato 키:값 (chave:valor).
| Tipo | Formato | Exemplo |
|---|---|---|
| Geral | 키:값 |
품명:펜 |
| Data | 키:@YYYY-MM-DD@ |
시작일:@2025-01-15@ |
| Telefone | 키:#전화번호# |
연락처:#+82 10-1234-5678# |
| Localização | 키:%주소% |
장소:%서울시 강남구% |
| Valor | 키:$금액통화$ |
가격:$50000KRW$ |
Restrições
- Comprimento da chave: máx. 8 caracteres
- Comprimento total das palavras-chave: máx. 256 caracteres
- Número de palavras-chave: máx. 128
Resposta
{
"success": true,
"data": {
"token": "암호화된_템플릿_ID",
"title": "템플릿 제목",
"createdAt": "2025-01-01T00:00:00Z"
}
}
POST /templates/{token}/share - Compartilhar um modelo
Compartilha um modelo para que outros usuários possam pesquisá-lo.
Solicitação
curl -X POST \
-H "Authorization: Bearer inv_xxx" \
-H "Content-Type: application/json" \
-d '{
"durationMinutes": 1440,
"tags": ["TAG1", "TAG2"]
}' \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/templates/{token}/share"
Corpo da solicitação
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| durationMinutes | number | Sim | Duração do compartilhamento (minutos). 60-43200 ou 0 (indefinido) |
| tags | string[] | Sim | Tags de pesquisa (1-16, conversão automática para maiúsculas) |
| logPermission | string | Não | Permissão de logs: “owner” | “author” | “none” (substitui a configuração do item) |
| keywordPermission | string | Não | Permissão de palavras-chave: “owner” | “author” | “none” (substitui a configuração do item) |
Valores de permissão
| Valor | Descrição |
|---|---|
| owner | Qualquer pessoa que tenha clonado o modelo pode adicionar/editar |
| author | Somente o autor do modelo pode adicionar/editar |
| none | Desativado |
Duração do compartilhamento
| Valor | Significado |
|---|---|
| 60 | 1 hora |
| 1440 | 1 dia (24 horas) |
| 10080 | 1 semana |
| 43200 | 30 dias (máximo) |
| 0 | Indefinido |
Resposta
{
"success": true,
"data": {
"shareToken": "암호화된_공유_ID",
"expiresAt": "2025-01-02T00:00:00Z",
"tags": ["TAG1", "TAG2"]
}
}
POST /templates/revoke - Revogar um compartilhamento
Cancela o compartilhamento de um modelo atualmente compartilhado.
Solicitação
curl -X POST \
-H "Authorization: Bearer inv_xxx" \
-H "Content-Type: application/json" \
-d '{
"shareToken": "암호화된_공유_ID"
}' \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/templates/revoke"
Corpo da solicitação
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| shareToken | string | Sim | shareToken recebido no momento do compartilhamento |
Resposta
{
"success": true,
"data": {
"message": "Share revoked successfully"
}
}
POST /templates/{token}/send - Enviar um modelo
Clona um modelo e o envia para outro usuário.
Solicitação
curl -X POST \
-H "Authorization: Bearer inv_xxx" \
-H "Content-Type: application/json" \
-d '{
"recipientEmail": "recipient@example.com",
"message": "선물입니다!",
"keywords": ["날짜:2025-01-15", "금액:50000"]
}' \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/templates/{token}/send"
Corpo da solicitação
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| recipientEmail | string | Sim | E-mail do destinatário |
| message | string | Não | Mensagem de envio (máx. 200 caracteres) |
| keywords | string[] | Não | Array de palavras-chave a adicionar/sobrescrever |
Regras de mesclagem de palavras-chave
O parâmetro keywords permite sobrescrever as palavras-chave padrão do modelo ou adicionar novas.
| Situação | Comportamento |
|---|---|
| Se a chave já existir | É sobrescrita com o valor da API |
| Se for uma chave nova | É adicionada à lista de palavras-chave |
Exemplo:
- Palavras-chave do modelo:
["날짜:@date@", "가격:0"] - Palavras-chave da API:
["날짜:2025-01-15", "이름:홍길동"] - Resultado:
["날짜:2025-01-15", "가격:0", "이름:홍길동"]
Resposta
{
"success": true,
"data": {
"itemToken": "암호화된_아이템_ID",
"recipientEmail": "recipient@example.com",
"status": "pending"
}
}
POST /templates/{token}/check-ownership - Verificar a posse de um item clonado
Verifica se um determinado usuário possui um item clonado criado a partir deste modelo.
Segurança: a consulta só é possível para modelos de sua propriedade. Não é possível consultar modelos de outros usuários.
Solicitação
curl -X POST \
-H "Authorization: Bearer inv_xxx" \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"keywordKeys": ["날짜", "금액"]
}' \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/templates/{token}/check-ownership"
Corpo da solicitação
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| string | Sim | E-mail do usuário a consultar | |
| keywordKeys | string[] | Não | Lista de chaves de palavras-chave a consultar |
Resposta (se possuir)
{
"success": true,
"data": {
"hasItem": true,
"itemTokens": ["암호화된_아이템_ID_1", "암호화된_아이템_ID_2"],
"keywords": {
"날짜": "2025-01-15",
"금액": "50000"
}
}
}
Resposta (se não possuir)
{
"success": true,
"data": {
"hasItem": false
}
}
Campos da resposta
| Campo | Tipo | Descrição |
|---|---|---|
| hasItem | boolean | Posse ou não |
| itemTokens | string[] | Lista de tokens dos itens possuídos (somente se possuir) |
| keywords | object | Valores das palavras-chave solicitadas (somente se solicitadas) |
Exemplo de uso
Verificação da posse e do status de uso de um determinado usuário em um sistema de cupons/ingressos:
# 쿠폰 발급 여부 확인
curl -X POST \
-H "Authorization: Bearer inv_xxx" \
-H "Content-Type: application/json" \
-d '{"email": "customer@example.com", "keywordKeys": ["발급일", "사용여부"]}' \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/templates/{쿠폰템플릿토큰}/check-ownership"
POST /templates/{token}/log - Adicionar logs e atualizar o modelo
Adiciona logs (feed) a um modelo compartilhado ou atualiza palavras-chave, permissões ou imagem. Uma notificação push é enviada aos usuários que clonaram este modelo.
Solicitação
curl -X POST \
-H "Authorization: Bearer inv_xxx" \
-H "Content-Type: application/json" \
-d '{
"logs": [
{"content": "붉은사막 최종 트레일러 공개 https://youtu.be/abc"},
{"content": "블로그:https://example.com/update-notes"}
],
"keywordUpdates": [
{"action": "upsert", "key": "출시일", "value": "2026-03-28"},
{"action": "upsert", "key": "가격", "value": "69,800원"},
{"action": "delete", "key": "베타일정"}
],
"permissionUpdates": {
"logPermission": "owner",
"keywordPermission": "author"
},
"imageUrl": "https://example.com/new-image.png"
}' \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/templates/{token}/log"
Corpo da solicitação
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| logs | array | Condicional* | Lista de logs a adicionar (máx. 10) |
| logs[].content | string | Sim | Conteúdo do log (1~256 caracteres) |
| keywordUpdates | array | Condicional* | Lista de alterações de palavras-chave (máx. 20) |
| keywordUpdates[].action | string | Sim | "upsert" ou "delete" |
| keywordUpdates[].key | string | Sim | Chave da palavra-chave (1~8 caracteres) |
| keywordUpdates[].value | string | Se upsert | Valor da palavra-chave (key:value combinado máx. 256 caracteres) |
| permissionUpdates | object | Condicional* | Alteração de permissões |
| permissionUpdates.logPermission | string | Não | “owner” | “author” | “none” |
| permissionUpdates.keywordPermission | string | Não | “owner” | “author” | “none” |
| imageUrl | string | Condicional* | Nova URL de imagem (reprocessada como WebP 512x512) |
* Pelo menos um entre
logs,keywordUpdates,permissionUpdates,imageUrldeve ser fornecido.
Formato do conteúdo dos logs
Logs no formato 키:값 (chave de 1~8 caracteres) são renderizados no aplicativo como cartões de informação/URL:
| Formato | Renderização |
|---|---|
일반 텍스트 |
Comentário de texto normal |
키:값 |
Cartão de informação (exibição chave-valor) |
키:https://... |
Cartão de URL (link clicável) |
Resposta
{
"success": true,
"data": {
"logsAdded": 2,
"keywordsUpdated": 2,
"keywordsDeleted": 1,
"notificationsSent": 5
}
}
Exemplo de uso
Atualizar periodicamente as palavras-chave de um item de rastreamento de dados e adicionar um feed de notícias:
# 유류비 데이터 갱신 + 뉴스 로그 추가
curl -X POST \
-H "Authorization: Bearer inv_xxx" \
-H "Content-Type: application/json" \
-d '{
"keywordUpdates": [
{"action": "upsert", "key": "휘발유", "value": "1,680원"},
{"action": "upsert", "key": "경유", "value": "1,520원"}
],
"logs": [
{"content": "3월 둘째주 전국 평균 유류비 소폭 상승 https://news.example.com/fuel"}
]
}' \
"https://asia-northeast3-inventory-app-service.cloudfunctions.net/apiV1/templates/{token}/log"
Códigos de erro
Se uma solicitação à API falhar, um erro é retornado no seguinte formato:
{
"success": false,
"error": {
"code": "ERROR_CODE",
"message": "에러 설명"
}
}
Lista de códigos de erro
| Código | Status HTTP | Descrição |
|---|---|---|
| INVALID_API_KEY | 401 | Chave de API inválida |
| API_KEY_EXPIRED | 401 | Chave de API expirada |
| API_DISABLED | 403 | API desativada |
| RATE_LIMIT_EXCEEDED | 429 | Limite de solicitações excedido |
| SCOPE_DENIED | 403 | Permissões insuficientes |
| VALIDATION_ERROR | 400 | Erro nos dados de entrada |
| INVALID_TOKEN | 400 | Token inválido |
| NOT_FOUND | 404 | Recurso não encontrado |
| FORBIDDEN | 403 | Acesso negado (sem propriedade) |
| RECIPIENT_NOT_FOUND | 404 | Destinatário não encontrado |
| INVALID_IMAGE | 400 | Erro na URL da imagem |
| ALREADY_SHARED | 400 | Modelo já em compartilhamento |
| NOT_SHARED | 400 | Modelo não compartilhado atualmente |
Recomendações de segurança
- Proteja sua chave de API: não exponha a chave de API em repositórios públicos nem em código de cliente
- Use HTTPS: todas as solicitações são transmitidas via HTTPS
- Rotação de chaves: regenere periodicamente sua chave de API
- Privilégio mínimo: execute apenas as operações necessárias
Contato
Se tiver problemas com o uso da API, entre em contato conosco pela página Enviar sugestão.