Skip to main content

# API REST - Krayin CRM v2.1.6

Guia completo para instalação, configuração e uso da API REST do Krayin CRM.


📋 Índice

  1. Visão Geral
  2. Instalação
  3. Autenticação
  4. Estrutura de URLs
  5. Rate Limiting
  6. Primeiros Passos
  7. Troubleshooting

Visão Geral

A API REST do Krayin CRM é construída sobre Laravel Sanctum e fornece acesso completo a todas as entidades do CRM:

Recurso Operações Endpoint Base
Leads CRUD, Conversão /api/v1/leads
Contacts/Persons CRUD /api/v1/contacts/persons
Organizations CRUD /api/v1/contacts/organizations
Products CRUD /api/v1/products
Activities CRUD /api/v1/activities
Quotes CRUD /api/v1/quotes
Webhooks CRUD /api/v1/webhooks
Tags CRUD /api/v1/tags

Instalação

Passo 1: Instalar o Pacote da API

# Dentro do container
docker exec -it krayin bash

# Instalar pacote
composer require krayin/rest-api

Passo 2: Executar Instalação

php artisan krayin-rest-api:install

Passo 3: Configurar .env

# Adicionar ao .env
SANCTUM_STATEFUL_DOMAINS=crm.memudecore.com.br

# Para desenvolvimento local
# SANCTUM_STATEFUL_DOMAINS=localhost

Passo 4: Verificar Instalação

Acesse a documentação interativa:

https://crm.memudecore.com.br/api/admin/documentation

Autenticação

Obter Token de Acesso

curl -X POST "https://crm.memudecore.com.br/api/v1/login" \
  -H "Accept: application/json" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "email=admin@example.com&password=sua_senha&device_name=MeuApp"

Resposta:

{
  "token": "1|LargeRandomTokenString1234567890",
  "message": "login successfully"
}

Usar Token nas Requisições

curl -X GET "https://crm.memudecore.com.br/api/v1/leads" \
  -H "Authorization: Bearer 1|LargeRandomTokenString1234567890" \
  -H "Accept: application/json"

Características do Token

Aspecto Detalhe
Formato `{id}
Validade Até novo login ou revogação
Múltiplos Tokens Cada login gera novo token, invalida anteriores
Armazenamento Guardar de forma segura, nunca expor no frontend

Criar Token Permanente (via Tinker)

docker exec -it krayin php artisan tinker
$user = User::where('email', 'admin@example.com')->first();
$token = $user->createToken('Integration-Token');
echo $token->plainTextToken;
// Saída: 1|abc123xyz...

Token com Expiração

// Token válido por 30 dias
$token = $user->createToken('API-Token', ['*'], now()->addDays(30));

Estrutura de URLs

Base URL

https://crm.memudecore.com.br/api/v1

Exemplos de Endpoints

Operação Método Endpoint
Login POST /api/v1/login
Listar Leads GET /api/v1/leads
Criar Lead POST /api/v1/leads
Ver Lead GET /api/v1/leads/{id}
Atualizar Lead PUT /api/v1/leads/{id}
Deletar Lead DELETE /api/v1/leads/{id}
Converter Lead POST /api/v1/leads/{id}/convert
Documentação GET /api/admin/documentation

⚠️ Importante

  • NÃO use /public na URL
  • NÃO use barra final (/leads/ ❌ → /leads ✅)
  • SEMPRE use HTTPS em produção

Rate Limiting

Limites Recomendados

Endpoint Limite Motivo
/api/v1/login 10/min Prevenir brute force
GET /api/v1/* 100/min Leituras são seguras
POST /api/v1/* 50/min Escritas requerem cuidado
Default 60/min Segurança geral

Headers de Rate Limit

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1705425600

Resposta Quando Excede

HTTP/1.1 429 Too Many Requests

{
  "message": "Too Many Requests"
}

Configurar Rate Limiting Personalizado

Edite routes/api.php:

Route::middleware(['throttle:60,1'])->group(function () {
    Route::get('/leads', [LeadController::class, 'index']);
});

Primeiros Passos

Exemplo Completo: Criar Lead

#!/bin/bash

# 1. Obter token
TOKEN_RESPONSE=$(curl -s -X POST "https://crm.memudecore.com.br/api/v1/login" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "email=admin@example.com&password=admin123&device_name=Script")

TOKEN=$(echo $TOKEN_RESPONSE | jq -r '.token')
echo "Token obtido: $TOKEN"

# 2. Criar lead
curl -X POST "https://crm.memudecore.com.br/api/v1/leads" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Novo Cliente - Empresa ABC",
    "source_id": 1,
    "lead_type_id": 1,
    "sales_owner_id": 1,
    "value": 5000,
    "description": "Lead criado via API"
  }'

Exemplo JavaScript/Fetch

// Login
const loginResponse = await fetch('https://crm.memudecore.com.br/api/v1/login', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
  },
  body: 'email=admin@example.com&password=admin123&device_name=WebApp'
});

const { token } = await loginResponse.json();

// Criar Lead
const leadResponse = await fetch('https://crm.memudecore.com.br/api/v1/leads', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${token}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    title: 'Lead via JavaScript',
    source_id: 1,
    lead_type_id: 1,
    sales_owner_id: 1,
    value: 3000
  })
});

const lead = await leadResponse.json();
console.log('Lead criado:', lead);

Troubleshooting

Erro 401 Unauthorized

Causa: Token inválido ou expirado

Solução:

# Gerar novo token
curl -X POST "https://crm.memudecore.com.br/api/v1/login" \
  -d "email=admin@example.com&password=admin123"

Erro 422 Validation Error

Causa: Campos obrigatórios faltando

Resposta típica:

{
  "message": "The given data was invalid.",
  "errors": {
    "title": ["The title field is required."],
    "source_id": ["The source id field is required."]
  }
}

Erro 429 Too Many Requests

Causa: Rate limit excedido

Solução: Aguardar tempo indicado no header X-RateLimit-Reset

Erro 500 Internal Server Error

Causa: Erro no servidor

Verificar:

docker exec krayin tail -50 storage/logs/laravel.log

CORS Error (Browser)

Causa: Domínio não autorizado

Solução: Verificar config/cors.php e SANCTUM_STATEFUL_DOMAINS


📚 Documentação Relacionada

Documento Conteúdo
API-ENDPOINTS.md Lista completa de endpoints
WEBHOOKS.md Configuração de webhooks
INTEGRATIONS.md N8N, WhatsApp, Operaes

  • Documentação Oficial: https://devdocs.krayincrm.com
  • API Docs Interativo: https://crm.memudecore.com.br/api/admin/documentation
  • GitHub REST API: https://github.com/krayin/rest-api
  • Fóruns: https://forums.krayincrm.com

Última atualização: Janeiro 2026