š Documentação da API Krayin CRM
Guia
completoCompletoparadeinstalação, configuraçIntegração eusoUsodaAPIVersão:
REST2.1.1doData:KrayinJaneiroCRM.2026 URL Base: https://crm.memudecore.com.br/api/v1/ Documentação Interativa: https://crm.memudecore.com.br/api/documentation
VISĆO
ššÆĆndice
Visão GeralInstalaçãoAutenticaçãoEstrutura de URLsRate LimitingPrimeiros PassosTroubleshooting
Visão GeralGERALA API REST do Krayin CRM
Ć©permiteconstruĆdaintegrarsobrefacilmenteLaraveloSanctumsistema de CRM com aplicaƧƵes externas, automatizaƧƵes eforneceoutros sistemas empresariais. Esta API oferece acesso completoaaostodasrecursosasdeentidadesleads,docontatos,CRM:atividades e configuraƧƵes.
š CaracterĆsticas
Principais Sanctum (Token-based)Recurso
OperaçõesLaravel EndpointAutenticação:BaseFormato: Protocolo:JSON LeadsAPI CRUD,RESTConversão/api/v1/leadsHTTPS 3.0Contacts/PersonsDocumentação: CRUDSwagger/OpenAPI /api/v1/contacts/personsRate OrganizationsLimiting: CRUDConfigurÔvel /api/v1/contacts/organizationsVersionamento: v1 Products(atual) CRUD/api/v1/productsActivitiesCRUD/api/v1/activitiesQuotesCRUD/api/v1/quotesWebhooksCRUD/api/v1/webhooksTagsCRUD/api/v1/tags
Instalaçãoš INĆCIO RĆPIDO
Passo1.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çãophp 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çãoObter 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" \ -H "Accept: application/json" \ -d "email=admin@example.com&password=sua_senhaadmin123&device_name=MeuApp"MinhaAplicacao"Resposta:
{ "token"data": { "id": 1, "name": "1|LargeRandomTokenString1234567890"Example Admin", "email": "admin@example.com", "role": { "name": "Administrador", "permission_type": "all" } }, "message": "loginLoginsuccessfully"successful.", "token": "4|TqQU5H7ExZbrM8ErdwxXGC4Q2yWWFGZ5DjarC5q0050411c7" }2. Usar o Token nas RequisiƧƵes
curl -X GET "https://crm.memudecore.com.br/api/v1/leads" \ -H "Authorization: Bearer1|LargeRandomTokenString1234567890"4|TqQU5H7ExZbrM8ErdwxXGC4Q2yWWFGZ5DjarC5q0050411c7" \ -H "Accept: application/json"
š RECURSOS DISPONĆVEIS
CaracterĆsticasšÆdoLeadsToken/api/v1/leadsGerenciamento completo de prospects e oportunidades de vendas.
AspectoMĆ©todoDetalheEndpointDescrição FormatoGET`{id}/leadsListar todos os leads ValidadePOSTAtĆ©/leadsCriar novo login ou revogaçãoleadMĆŗltiplos TokensGETCada/leads/{id}loginObter geraleadnovo token, invalida anterioresespecĆficoArmazenamentoPUTGuardar/leads/{id}deAtualizar formaleadsegura,nuncaexporDELETE no/leads/{id}frontendExcluir lead
Criarš„TokenContatosPermanente (via Tinker)/api/v1/contactsdocker 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çãGestão
// Token vƔlido por 30 dias $token = $user->createToken('API-Token', ['*'], now()->addDays(30));pessoas
EstruturadeURLs
BaseeURLhttps://crm.memudecore.com.br/api/v1organizaƧƵes.
Exemplos de Endpoints
OperaçãoMétodo Endpoint Descrição LoginGET/contacts/personsListar pessoas POST /api/v1/logincontacts/personsCriar pessoa Listar LeadsGET /api/v1/leadscontacts/organizationsListar organizações Criar LeadPOST /api/v1/leadscontacts/organizationsCriar Ver LeadGET/api/v1/leads/{id}Atualizar LeadPUT/api/v1/leads/{id}Deletar LeadDELETE/api/v1/leads/{id}Converter LeadPOST/api/v1/leads/{id}/convertDocumentaçorganizaçãoGET/api/admin/documentation
ā ļø Importante
- š
deNĆOAtividadesuse/publicapi/v1/activitiesnaRegistro
URL- tarefas,
NĆOreuniƵesuseebarra final (/leads/ā ā/leadsā )SEMPREuse HTTPS em produção
Rate LimitinginteraƧƵes.
Limites Recomendados
Método Endpoint LimiteMotivoDescriçãoGET /api/v1/loginactivities10/minListar atividadesPOST Prevenir/activitiesbruteCriar forceatividadeGET /api/v1/*activities/{id}Obter 100/minLeituras são segurasatividadePOSTPUT/api/v1/*activities/{id}Atualizar 50/minEscritas requerem cuidadoDefault60/minSegurança geralatividade
HeadersāļødeConfiguraƧƵesRate LimitX-RateLimit-Limit: 60 X-RateLimit-Remaining: 45 X-RateLimit-Reset: 1705425600/api/v1/configuration
Resposta Quando ExcedeHTTP/1.1 429 Too Many Requests { "message": "Too Many Requests" }
Configurar Rate Limiting Personalizado
EditeAcessoroutes/api.php:às configurações do sistema.Route::middleware(['throttle:60,1'])->group(function () { Route::get('/leads', [LeadController::class, 'index']); });
Primeirosš”PassosEXEMPLOS PRĆTICOS
Exemplo Completo:š Criar um Novo 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 leadcurl -X POST "https://crm.memudecore.com.br/api/v1/leads" \ -H "Authorization: Bearer$TOKEN"{SEU_TOKEN}" \ -H "Content-Type: application/json" \ -d '{ "title": "NovoClienteLead - Empresa ABC", "source_id"description": "Interesse em nosso produto premium", "lead_value": 5000, "sales_owner_id": 1, "lead_source_id": 1, "lead_type_id": 1, "sales_owner_id"person":1,{ "name": "JoĆ£o Silva", "emails": [ {"value":5000,"joao@empresaabc.com", "description"label": "Leadwork"}criado],via"contact_numbers":API"[ {"value": "11999999999", "label": "mobile"} ] } }'š Listar Leads com Filtros
curl -X GET "https://crm.memudecore.com.br/api/v1/leads?page=1&limit=10&sort=created_at&order=desc" \ -H "Authorization: Bearer {SEU_TOKEN}" \ -H "Accept: application/json"š Criar uma Atividade
curl -X POST "https://crm.memudecore.com.br/api/v1/activities" \ -H "Authorization: Bearer {SEU_TOKEN}" \ -H "Content-Type: application/json" \ -d '{ "title": "Reunião com Cliente", "type": "meeting", "comment": "Discussão sobre proposta comercial", "schedule_from": "2026-01-20 14:00:00", "schedule_to": "2026-01-20 15:00:00", "lead_id": 1, "user_id": 1 }'
š AUTENTICAĆĆO E SEGURANĆA
Token de Acesso
- Tipo: Bearer Token
- Formato: Laravel Sanctum
- Localização: Header
Authorization: Bearer {token}- Expiração: ConfigurÔvel (padrão: 365 dias)
Boas PrƔticas de SeguranƧa
- Armazene tokens de forma segura (variƔveis de ambiente)
- Use HTTPS apenas para todas as requisiƧƵes
- Implemente rate limiting em sua aplicação
- Renove tokens periodicamente
- Monitore logs de acesso
Exemplo
JavaScript/Fetchde Configuração Segura//LoginNode.js/Express exemplo constloginResponseAPI_BASE =await fetch('https://crm.memudecore.com.br/api/v1/login',v1'; const API_TOKEN = process.env.KRAYIN_API_TOKEN; const headers = {method:'Authorization':'POST'`Bearer ${API_TOKEN}`,headers: {'Content-Type': 'application/x-www-form-urlencoded'json',}, body:'Accept': 'email=admin@example.com&password=admin123&device_name=WebApp'application/json' });
š INTEGRAĆĆES COMUNS
š Integração com Site/Landing Page
// Capturar lead do formulĆ”rio web async function criarLead(dadosFormulario) { const{ token } = await loginResponse.json(); // Criar Lead const leadResponseresponse = await fetch('https://crm.memudecore.com.br/api/v1/leads', { method: 'POST', headers: { 'Authorization':`'Bearer${token}`,' + API_TOKEN, 'Content-Type': 'application/json',}, body: JSON.stringify({ title:'`LeadviadoJavaScript'site - ${dadosFormulario.empresa}`,source_id:description:1,dadosFormulario.mensagem,lead_type_id:lead_value:1,dadosFormulario.valorEstimado,sales_owner_id:person:1,{ name: dadosFormulario.nome, emails: [{value:3000dadosFormulario.email, label: 'work'}], contact_numbers: [{value: dadosFormulario.telefone, label: 'mobile'}] } }) });constreturnlead = await leadResponse.response.json();console.log('Lead criado:', lead);}š±
Integração
Troubleshooting
Errocom401 UnauthorizedWhatsApp/Chat
Causa:Token invƔlido ou expirado
Solução:#Gerar novo token curlPython -XPOSTSync com WhatsApp Business API import requests def sincronizar_contato_whatsapp(numero_whatsapp, nome): url = "https://crm.memudecore.com.br/api/v1/login"contacts/persons"\headers-d= { "email=admin@example.com&password=admin123"Authorization": f"Bearer {API_TOKEN}", "Content-Type": "application/json" } data = { "name": nome, "contact_numbers": [ {"value": numero_whatsapp, "label": "whatsapp"} ] } response = requests.post(url, json=data, headers=headers) return response.json()
Erroš Integração com N8N (Automação){ "nodes": [ { "type": "n8n-nodes-base.webhook", "webhook": { "path": "novo-lead" } }, { "type": "n8n-nodes-base.httpRequest", "url": "https://crm.memudecore.com.br/api/v1/leads", "method": "POST", "headers": { "Authorization": "Bearer {{$env.KRAYIN_TOKEN}}" } } ] }š Integração com BI/Analytics
-- Exemplo de extração para Power BI/Tableau -- Via script Python que consome a API import pandas as pd import requests def extrair_leads_para_bi(): headers = {'Authorization': f'Bearer {API_TOKEN}'} response = requests.get( 'https://crm.memudecore.com.br/api/v1/leads?limit=1000', headers=headers ) leads_data = response.json() df = pd.DataFrame(leads_data['data']) # Salvar em CSV para BI df.to_csv('leads_export.csv', index=False) return df
ā” CASOS DE USO PRĆTICOS
1. E-commerce ā CRM
Sincronizar automaticamente novos pedidos como leads:
// Webhook no e-commerce app.post('/webhook/novo-pedido', async (req, res) => { const pedido = req.body; await criarLead({ title: `Pedido #${pedido.id} - ${pedido.cliente.nome}`, lead_value: pedido.total, person: { name: pedido.cliente.nome, emails: [{value: pedido.cliente.email, label: 'work'}] } }); });2. Sistema de Tickets ā CRM
Converter tickets em atividades:
// PHP - Converter ticket em atividade function converterTicketEmAtividade($ticket) { $data = [ 'title' => "Suporte: " . $ticket['assunto'], 'type' => 'call', 'comment' => $ticket['descricao'], 'lead_id' => buscarLeadPorEmail($ticket['email_cliente']) ]; return chamarApiKrayin('POST', '/activities', $data); }3. Marketing Automation ā CRM
Sync de campanhas com leads:
# Mailchimp/RD Station ā Krayin def sincronizar_campanha_email(): # Obter dados da campanha campanhas = obter_campanhas_mailchimp() for campanha in campanhas: for contato in campanha['contatos_convertidos']: criar_lead_krayin({ 'title': f"Lead da campanha: {campanha['nome']}", 'description': f"Converteu via email: {campanha['assunto']}", 'person': contato })
š MONITORAMENTO E LOGS
Logs da API
# Verificar logs em tempo real docker exec krayin_krayin.1.xxxxx tail -f storage/logs/laravel.log # Filtrar por API requests docker exec krayin_krayin.1.xxxxx grep "api/v1" storage/logs/laravel.logMƩtricas Importantes
- Taxa de sucesso das requisiƧƵes
- Tempo de resposta mƩdio
- Picos de uso
- Tipos de erro mais comuns
š§ TROUBLESHOOTING
Erros Comuns
401 Unauthorized
{"message": "Unauthenticated."}Solução: Verificar se o token estÔ correto e não expirado.
422 Validation Error
Causa:Campos obrigatórios faltando
Resposta tĆpica:{ "message": "The given data was invalid.", "errors": { "title"email": ["Thetitle field is required."], "source_id": ["The source idemail field is required."] } }
Erro 429 Too Many Requests
Causa:Rate limit excedido
Solução:Aguardar tempo indicado no headerX-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 autorizadoSolução: Verificar campos obrigatórios na documentação.
429 Too Many Requests
config/cors.php{"message": "Too many attempts."}eSolução: Implementar rate limiting na aplicação cliente.
Testes de Conectividade
SANCTUM_STATEFUL_DOMAINS# Testar conectividade bÔsica curl -I https://crm.memudecore.com.br/api/v1/ # Testar autenticação curl -H "Authorization: Bearer {TOKEN}" \ https://crm.memudecore.com.br/api/v1/leads?limit=1
ššDocumentaçãoRECURSOSRelacionadaADICIONAIS
DocumentoConteúdoAPI-ENDPOINTS.mdLista completa de endpointsWEBHOOKS.mdConfiguração de webhooksINTEGRATIONS.mdN8N, WhatsApp, Operaes
šLinks Ćteis
- Documentação
Oficial:https://devdocs.krayincrm.comAPI Docs Interativo:Interativa: https://crm.memudecore.com.br/api/admin/documentationGitHubSwaggerREST API:UI:https://github.com/krayin/rest-apiInterface para testar endpointsFóruns:Postman Collection:https://forums.krayincrm.comImportar collection (se disponĆvel)Contato TĆ©cnico
- Suporte: [seu-email-suporte]
- Documentação: Este documento
- Updates: Acompanhar releases do Krayin CRM
š CHANGELOG E VERSIONING
v2.1.1 (Atual)
- ā API REST completa implementada
- ā Autenticação Sanctum
- ā Documentação Swagger
- ā Endpoints CRUD completos
- ā Suporte a webhooks
Próximas Versões
- š Webhooks customizĆ”veis
- š Filtros avanƧados
- š Bulk operations
- š GraphQL support
āļø TERMOS DE USO
Rate Limits
- Padrão: 60 requisições/minuto por token
- Burst: 1000 requisiƧƵes/hora
- Enterprise: Limites customizƔveis
SLA
- Disponibilidade: 99.9%
- Tempo de resposta: < 200ms (mƩdia)
- Suporte: HorƔrio comercial
ĆltimaDocumentaçãoatualização:gerada em Janeiro 2026 VersĆ£o 1.0 - API Krayin CRM v2.1.1