v4 Atualização da v4 disponível — framework refeito do zero. Ver novidades

Docs
API de Integração — v1

Construa o seu sistema em cima do framework

Uma API REST para quem quer emitir licenças com a própria marca: crie, renove, troque o domínio e valide licenças direto do seu painel, sem que o seu cliente final precise conhecer o MuCRM. Você mantém saldo pré-pago na carteira e cada ciclo de 30 dias custa R$ 9,99.

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.

Headers
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 — testando o token
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.

GET /api/v1/partner/me Gratuito
200 OK
{
  "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.

PATCH /api/v1/partner/me/settings Gratuito
Requisição
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"}'
200 OK
{
  "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.

GET /api/v1/partner/me/balance Gratuito
Requisição
curl -X GET "https://mucrm.com.br/api/v1/partner/me/balance" \
  -H "Authorization: Bearer SUA_API_KEY" \
  -H "Accept: application/json"
200 OK
{
  "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.

GET /api/v1/partner/me/statement Gratuito
200 OK
{
  "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).

GET /api/v1/partner/licenses Gratuito
Requisição
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"
200 OK
{
  "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.

POST /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.
Requisição
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"}'
201 Created
{
  "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
}
402 Payment Required
{
  "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.

POST /api/v1/partner/licenses/{license_key}/renew R$ 9,99
Requisição
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"
200 OK
{
  "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.

PATCH /api/v1/partner/licenses/{license_key}/change-domain Gratuito
Requisição
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"}'
200 OK
{
  "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.
422 Unprocessable Content
{
  "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.

PHP — Laravel HTTP Client
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'],
]);
Node.js — fetch
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.

Presente exclusivo

7 dias grátis

Crie sua conta agora e ganhe acesso completo por 7 dias.

Ao criar sua conta, você concorda com nossos Termos e Políticas.