# API REST - Krayin CRM v2.1.6
Guia completo para instalação, configuração e uso da API REST do Krayin CRM.
📋 Índice
- Visão Geral
- Instalação
- Autenticação
- Estrutura de URLs
- Rate Limiting
- Primeiros Passos
- 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
/publicna 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 |
🔗 Links Úteis
- 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