Introdução
A API de integração é API-First e opera de forma headless: o seu cliente final nunca precisa saber que existe um MuCRM por trás. Você integra os endpoints no seu próprio painel e a licença é entregue automaticamente assim que o seu cliente conclui o pagamento com você. Qualquer conta pode solicitar o acesso — não é preciso ser revendedor oficial para construir um sistema em cima do framework.
Você não precisa checar se a licença continua ativa: o próprio framework instalado conversa com a MuCRM e recebe os dados da licença a cada execução. Do seu lado, basta criar, renovar e trocar o domínio pelos endpoints abaixo.
Base URL
https://mucrm.com.br/api/v1
Formato
JSON / UTF-8
Ciclo
30 dias — R$ 9,99
Todas as requisições devem enviar os cabeçalhos abaixo. Sem o
Accept: application/json os erros de validação retornam HTML
em vez de JSON.
Authorization: Bearer SUA_API_KEY
Accept: application/json
Content-Type: application/json
Autenticação
A autenticação usa Bearer Token (Laravel Sanctum). Depois que a sua conta é liberada, você gera e revoga as suas chaves sozinho em Painel → API de Integração. Pode criar quantas quiser — o recomendado é uma por ambiente ou por sistema integrado, para conseguir revogar só a que vazou. As chaves não expiram.
Guarde a chave em local seguro. Ela dá acesso ao saldo da sua carteira: quem tiver o token consegue criar licenças e gastar o seu crédito. Nunca exponha a chave no front-end, em repositórios públicos ou em logs.
curl -X GET "https://mucrm.com.br/api/v1/partner/me/balance" \
-H "Authorization: Bearer SUA_API_KEY" \
-H "Accept: application/json"
Um token inválido devolve 401. Um token válido de uma conta que
ainda não foi habilitada como parceira devolve 403.
Carteira e cobrança
O modelo é pré-pago. Você adiciona saldo em Painel → API de Integração, pagando pelo Mercado Pago, e cada operação que gera 30 dias de licença debita R$ 9,99 automaticamente, dentro de uma transação de banco: ou a licença é criada e o valor é debitado, ou nada acontece.
Este saldo é exclusivo da API. Ele é usado apenas para emitir e renovar licenças pela integração. O crédito da recarga entra na conta assim que o Mercado Pago confirma o pagamento.
O que é cobrado
- Criação de licença — R$ 9,99
- Renovação de 30 dias — R$ 9,99
O que é gratuito
- Alterar o domínio de uma licença
- Listar licenças, consultar saldo e extrato
- Checagem automática da licença no site do cliente
Se o saldo for menor que R$ 9,99 no momento da chamada, a API responde
402 Payment Required e nenhuma licença é criada ou renovada.
Recomendamos consultar o saldo antes de exibir o botão de compra no seu painel, ou simplesmente
tratar o 402 avisando que a recarga é necessária.
Marca própria
As chaves não precisam carregar a marca MuCRM. Você define um prefixo próprio e todas as licenças que emitir passam a ser geradas com ele — o seu cliente final vê apenas o nome do seu sistema.
Padrão
mucrm-key-9f2c…
Com o seu prefixo
meushop-key-9f2c…
Depois do prefixo vem sempre -key- seguido de um hash SHA-256 de
64 caracteres, gerado aleatoriamente a cada licença. Isso mantém a chave impossível de adivinhar
mesmo que alguém conheça o seu prefixo.
O prefixo aceita de 2 a 16 caracteres, apenas letras e números, e é sempre salvo em caixa baixa.
Você define o padrão da conta no painel ou pelo endpoint de configurações, e ainda pode
sobrescrevê-lo em uma chamada específica enviando prefix na
criação da licença — útil se você atende marcas diferentes com a mesma conta. Chaves já
emitidas continuam válidas com o prefixo antigo.
Objeto Licença
Todos os endpoints de licença retornam o mesmo objeto, sempre dentro da chave
data.
| Campo | Tipo | Descrição |
|---|---|---|
| id | uuid | Identificador interno da licença. |
| license_key | string | Chave no formato prefixo-key-<sha256>, usando o prefixo da sua conta. É ela que o cliente coloca no framework. |
| domain | string | Domínio autorizado, já normalizado (sem protocolo e sem www.). |
| status | enum | active, expired ou suspended. |
| expires_at | ISO 8601 | Data e hora em que o acesso deixa de funcionar. |
| days_remaining | int | Dias restantes até a expiração. Útil para exibir no seu painel. |
| is_partner | bool | Indica que a licença foi gerada via API de parceiro. |
| last_check_in_at | ISO 8601 | Última vez que o site do cliente validou a licença. |
Dados da conta
Retorna os dados da conta integrada, incluindo o prefixo ativo e um exemplo de chave.
/api/v1/partner/me
Gratuito
{
"name": "Meu Sistema LTDA",
"email": "dev@meusistema.com",
"license_prefix": "meushop",
"key_example": "meushop-key-xxxxxxxx…",
"balance": 49.95
}
Alterar prefixo
Define o prefixo padrão da conta. Vale para todas as licenças emitidas a partir da chamada.
/api/v1/partner/me/settings
Gratuito
curl -X PATCH "https://mucrm.com.br/api/v1/partner/me/settings" \
-H "Authorization: Bearer SUA_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"license_prefix": "meushop"}'
{
"license_prefix": "meushop",
"key_example": "meushop-key-xxxxxxxx…",
"balance": 49.95,
"message": "Prefixo atualizado. As próximas licenças já serão geradas com ele."
}
Consultar saldo
Retorna o saldo atual da carteira e quantas licenças ainda dá para emitir com ele.
/api/v1/partner/me/balance
Gratuito
curl -X GET "https://mucrm.com.br/api/v1/partner/me/balance" \
-H "Authorization: Bearer SUA_API_KEY" \
-H "Accept: application/json"
{
"balance": 49.95,
"balance_formatted": "R$ 49,95",
"license_price": 9.99,
"available_credits": 5
}
Extrato da carteira
Histórico paginado de todas as movimentações — débitos por licença e créditos de recarga.
Use ?page= e ?per_page=
(máximo 100) para navegar.
/api/v1/partner/me/statement
Gratuito
{
"data": [
{
"id": "9b1f...",
"type": "debit",
"reason": "license_activation",
"amount": 9.99,
"balance_after": 40.01,
"description": "Ativação de licença para o domínio cliente.com.br",
"license_id": "9b1e...",
"created_at": "2026-08-28T14:31:07-03:00"
}
],
"links": { "first": "...", "last": "...", "prev": null, "next": null },
"meta": { "current_page": 1, "per_page": 15, "total": 1 }
}
Listar licenças
Devolve apenas as licenças criadas pela sua conta, da mais recente para a mais antiga.
Você pode filtrar por status e por
domain (busca parcial).
/api/v1/partner/licenses
Gratuito
curl -X GET "https://mucrm.com.br/api/v1/partner/licenses?status=active&per_page=20" \
-H "Authorization: Bearer SUA_API_KEY" \
-H "Accept: application/json"
{
"data": [
{
"id": "9b1e...",
"license_key": "meushop-key-029c0a13c086144eccfa12e69ab78d4b1de955f5a599187579b3b36818280388",
"domain": "cliente.com.br",
"status": "active",
"is_partner": true,
"expires_at": "2026-09-27T14:31:07-03:00",
"days_remaining": 30,
"last_check_in_at": null,
"created_at": "2026-08-28T14:31:07-03:00"
}
],
"meta": { "current_page": 1, "per_page": 20, "total": 1 }
}
Criar licença
Debita R$ 9,99 da carteira, gera a chave e já entrega a licença ativa por 30 dias.
O domínio é normalizado antes de ser salvo, então
https://www.Cliente.com.br/ e
cliente.com.br são tratados como o mesmo domínio.
/api/v1/partner/licenses
R$ 9,99
Parâmetros
| domain | obrigatório | Domínio do cliente. Precisa ser um domínio válido e ainda não vinculado a outra licença. |
| prefix | opcional | Sobrescreve o prefixo da conta apenas nesta chave. De 2 a 8 letras ou números. |
curl -X POST "https://mucrm.com.br/api/v1/partner/licenses" \
-H "Authorization: Bearer SUA_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"domain": "cliente.com.br", "prefix": "meushop"}'
{
"data": {
"license_key": "meushop-key-029c0a13c086144eccfa12e69ab78d4b1de955f5a599187579b3b36818280388",
"domain": "cliente.com.br",
"status": "active",
"expires_at": "2026-09-27T14:31:07-03:00",
"days_remaining": 30
},
"message": "Licença criada e ativada com sucesso.",
"charged": 9.99,
"balance": 40.01
}
{
"error": "Saldo insuficiente. Recarregue no painel MuCRM."
}
Renovar licença
Debita R$ 9,99 e adiciona 30 dias. Se a licença ainda estiver válida, os dias são
somados ao tempo restante — o seu cliente não perde nada por
renovar antes. Se já tiver expirado, o novo ciclo começa no momento da chamada e o status volta
para active.
/api/v1/partner/licenses/{license_key}/renew
R$ 9,99
curl -X POST "https://mucrm.com.br/api/v1/partner/licenses/meushop-key-029c0a13c086144eccfa12e69ab78d4b1de955f5a599187579b3b36818280388/renew" \
-H "Authorization: Bearer SUA_API_KEY" \
-H "Accept: application/json"
{
"data": {
"license_key": "meushop-key-029c0a13c086144eccfa12e69ab78d4b1de955f5a599187579b3b36818280388",
"domain": "cliente.com.br",
"status": "active",
"expires_at": "2026-10-27T14:31:07-03:00",
"days_remaining": 60
},
"message": "Licença renovada por mais 30 dias.",
"charged": 9.99,
"balance": 30.02
}
Alterar domínio
Troca o domínio vinculado sem nenhum custo, mantendo a mesma chave e a mesma data de expiração. O domínio antigo perde o acesso imediatamente, já na checagem seguinte do framework.
/api/v1/partner/licenses/{license_key}/change-domain
Gratuito
curl -X PATCH "https://mucrm.com.br/api/v1/partner/licenses/meushop-key-029c0a13c086144eccfa12e69ab78d4b1de955f5a599187579b3b36818280388/change-domain" \
-H "Authorization: Bearer SUA_API_KEY" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"domain": "novodominio.com.br"}'
{
"data": {
"license_key": "meushop-key-029c0a13c086144eccfa12e69ab78d4b1de955f5a599187579b3b36818280388",
"domain": "novodominio.com.br",
"status": "active",
"expires_at": "2026-10-27T14:31:07-03:00"
},
"message": "Domínio atualizado. O domínio anterior perdeu o acesso imediatamente."
}
Códigos de erro
A API usa os códigos HTTP padrão. Erros trazem sempre a chave
error com a mensagem pronta para exibição.
| Código | Significado | O que fazer |
|---|---|---|
| 200 | Sucesso | Nada — a operação foi concluída. |
| 201 | Licença criada | Entregue a chave ao seu cliente. |
| 401 | Token ausente ou inválido | Confira o header Authorization. |
| 403 | Conta sem acesso de parceiro ou bloqueada | Solicite a habilitação da conta com o suporte MuCRM. |
| 404 | Licença não encontrada | A chave não existe ou pertence a outro parceiro. |
| 409 | Domínio já vinculado | Escolha outro domínio ou use o endpoint de alterar domínio. |
| 422 | Falha de validação | Leia a chave errors para saber qual campo corrigir. |
| 402 | Saldo insuficiente | Recarregue a carteira no painel MuCRM. |
| 429 | Limite de requisições atingido | Aguarde o tempo indicado em Retry-After. |
{
"message": "O domínio é obrigatório.",
"errors": {
"domain": ["O domínio é obrigatório."]
}
}
Rate limits
Todo endpoint exige Bearer Token e é contado pela credencial e pelo IP de origem. Ao estourar o
limite a API responde 429, e toda resposta traz os headers
X-RateLimit-Limit e
X-RateLimit-Remaining.
Endpoints de parceiro
60 req/min
Por conta autenticada.
Chamadas sem token válido
20 req/min
Teto por IP de origem.
Exemplo de integração
O fluxo recomendado é simples: o seu cliente paga no seu painel, você chama a API e entrega a chave. Abaixo, o mesmo fluxo em PHP e em Node.js.
use Illuminate\Support\Facades\Http;
$response = Http::withToken(config('services.mucrm.key'))
->acceptJson()
->post('https://mucrm.com.br/api/v1/partner/licenses', [
'domain' => $cliente->dominio,
]);
if ($response->status() === 402) {
// Sem saldo: avise o time e segure a entrega.
return back()->with('error', 'Recarregue a carteira MuCRM.');
}
$licenca = $response->throw()->json('data');
$cliente->update([
'license_key' => $licenca['license_key'],
'expires_at' => $licenca['expires_at'],
]);
const res = await fetch('https://mucrm.com.br/api/v1/partner/licenses', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.MUCRM_API_KEY}`,
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({ domain: 'cliente.com.br' }),
});
if (res.status === 402) {
throw new Error('Saldo insuficiente na carteira MuCRM.');
}
const { data } = await res.json();
console.log(data.license_key, data.expires_at);
Pronto para integrar?
Peça a liberação da sua conta, gere a sua chave no painel, escolha o prefixo da sua marca e faça a primeira recarga da carteira.