> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Lista de erros do Lender

> Consulte cada status HTTP e código de erro LENDER retornado pela API do Lender, a condição por trás dele e a ação que o resolve.

**Formato de erro**

O Lender retorna a maioria dos erros como problem details RFC 9457 com o media type `application/problem+json`. Uma recusa por rate limit responde com um corpo plano `{code, title, message}` em
`application/json`.

```json Problem detail theme={null}
{
  "title": "Unprocessable Entity",
  "status": 422,
  "detail": "validation failed",
  "errors": [
    {
      "location": "body.grossRequestedAmount",
      "message": "expected string",
      "value": 50000
    }
  ]
}
```

```json Rate-limit body theme={null}
{
  "code": 429,
  "title": "rate_limit_exceeded",
  "message": "rate limit exceeded"
}
```

**Definições de campo**

* **`code`** – O código de domínio estável e legível por máquina que a recusa carrega, no formato `LENDER-NNNN`. Ausente quando a recusa não recebeu um. Faça o branch por ele primeiro.
* **`status`** – O código de status HTTP.
* **`title`** – O nome do status, como `Unprocessable Entity`.
* **`detail`** – O que deu errado nessa ocorrência. Abaixo de `500`, descreve a recusa específica.
* **`errors`** – Lista opcional de detalhes de validação de schema. Cada entrada carrega uma `location`, uma `message` e o `value` que o Lender recebeu.
* **`type`** – `https://errors.lerian.studio/v1/LENDER-NNNN` quando `code` está presente. O padrão `about:blank` da RFC 9457 caso contrário.

O corpo plano de rate limit carrega `code`, `title` e `message` em vez disso. Seu `code` repete o status HTTP numérico. Seu `title` nomeia a recusa e sua `message` a explica em uma frase. Nenhuma das duas strings varia conforme o chamador ou nomeia sua cota restante.

Faça o branch por `code` quando a resposta carregar um, e pelo status HTTP e pelo content type quando não carregar. Leia `detail` apenas como prosa para uma pessoa. O middleware de autorização e de idempotência pode responder em seus próprios formatos de resposta.

## Erros do cliente

***

O Lender responde com `4xx` quando a requisição é o problema, e `detail` nomeia a recusa específica.

O Lender restringe uma busca ao tenant do chamador e ao pai nomeado no path. Um identificador que resolve fora desse escopo responde da mesma forma que um identificador que não resolve a nada.

Um comando precisa de um subject na identidade do chamador, porque o Lender registra esse subject como o ator por trás da mudança. Limites de bytes se aplicam duas vezes: o framework limita o corpo da requisição, e cada superfície de ingestão de arquivo limita o arquivo que aceita.

A validação de schema roda antes do handler e preenche `errors` com uma entrada por localização rejeitada.

| Status | O que significa | O que fazer |
| - | - | - |
| `400` | A requisição chega sem corpo, ou o corpo não tem exatamente o formato JSON que a operação lê. | Envie um corpo que corresponda ao schema da operação, então repita a requisição. |
| `400` | O header `X-Idempotency` é mais longo do que a operação aceita. | Envie uma chave mais curta, então repita a requisição. |
| `401` | A requisição chega sem uma identidade autenticada. | Envie um bearer token válido, então repita a requisição. |
| `401` | A identidade está autenticada, e seu subject está vazio. | Use um token cujo subject identifique o chamador. |
| `403` | A requisição não tem uma identidade de tenant validada para o recurso sobre o qual a operação atua. | Use um token com escopo para o tenant que detém o recurso, então repita a requisição. |
| `404` | O identificador no path nomeia um recurso que esse tenant não possui. | Verifique o identificador, e verifique o tenant ao qual o token tem escopo. |
| `404` | O recurso existe, e o pai nomeado no path não o possui. | Liste os próprios recursos do pai, então use um identificador dessa lista. |
| `409` | Outra requisição carregando o mesmo valor de `X-Idempotency` ainda está em execução. | Aguarde o intervalo de `Retry-After`, então leia o recurso. Não envie o comando novamente. |
| `422` | O valor de `X-Idempotency` já foi usado para uma requisição com um corpo diferente. | Não envie esse comando com uma nova chave. Leia primeiro o resultado da requisição original, então decida. |
| `409` | O `idempotencyKey` no corpo nomeia um termo já registrado com conteúdo diferente. | Leia o termo registrado. Uma nova chave registra um segundo termo para o mesmo conjunto. |
| `409` | O recurso está em uma etapa diferente do ciclo de vida, ou já foi encerrado. | Leia o recurso, então aja a partir da etapa em que ele está. |
| `409` | Outro processo alterou o recurso durante a requisição. | Leia o recurso novamente, então repita a requisição. |
| `409` | Um registro externo já aceitou esse comando exato. | Leia o protocolo registrado em vez de emitir o comando novamente. |
| `413` | O corpo da requisição é maior do que a operação aceita. | Envie um corpo menor. |
| `413` | O arquivo enviado é maior do que a superfície de ingestão aceita. | Envie um arquivo menor. |
| `405` | O path existe, e não aceita esse método HTTP. | Use um método que a operação declara na referência da API. |
| `415` | O header `Content-Type` nomeia um formato que a operação não lê. | Envie `application/json`. |
| `429` | O chamador enviou mais requisições do que o rate limit do deploy permite. | Leia o header `Retry-After`, aguarde esse número de segundos, então repita a requisição. |
| `422` | A requisição não corresponde ao schema da operação. | Corrija cada entrada em `errors`, então repita a requisição. |
| `422` | A requisição corresponde ao schema, e uma regra de negócio recusa seu conteúdo. | Leia `detail`, corrija a requisição, então a envie novamente. |
| `409` | Um comando alcançou um recurso que já está encerrado, e não é a reentrega do comando que o encerrou. | Reentregar o comando original sob a mesma identidade de requisição responde `200` com o registro que já vale. Este status significa um segundo comando, diferente. Leia o registro, então decida; nada foi lançado duas vezes. |
| `409` | A recusa é reprodutível: repetir a requisição reproduz o conflito. | Não a repita. O estado contra o qual a requisição foi construída mudou, então concilie o registro e emita o comando que o estado atual pede. |
| `422` | A recusa é terminal por desenho: a requisição nunca terá sucesso como está. | Não a reenvie, com ou sem correções. `detail` nomeia o caso. A operação recusou em vez de deixar o recurso pela metade, e o recurso está exatamente como estava. |
| `422` | A recusa nomeia configuração de deploy ou de operação, não uma requisição malformada. | Corrigir o corpo não resolve. `detail` nomeia o objeto e o estado em que ele está. Ajuste a configuração, então envie a requisição original de novo. |

## Erros do servidor

***

O Lender responde com `5xx` quando a requisição está correta e a chamada não pôde ser concluída.

Um `503` cobre duas condições: uma capacidade que o deploy não executa, e uma dependência que o Lender não consegue alcançar no momento da chamada. Um `502` cobre um terceiro que recusa um comando que o Lender encaminha a ele, como o registro que grava uma cessão de recebíveis.

| Status | O que significa | O que fazer |
| - | - | - |
| `500` | O Lender não conseguiu concluir a requisição. | Em uma leitura, repita a requisição. Em um comando que movimenta dinheiro, leia o recurso primeiro, e repita apenas se o comando não tiver sido aplicado. Se o status persistir, contate o suporte com a operação, o tenant e o horário da chamada. |
| `502` | O registro para o qual o Lender encaminha recusou o comando. | A resposta não nomeia o motivo. Verifique a configuração de registro do fundo e os dados do comando, então emita o comando novamente. |
| `503` | O deploy não executa a capacidade de que a operação precisa. | Peça à sua equipe de plataforma para habilitar a capacidade no seu deploy. |
| `503` | Um armazenamento ou uma dependência downstream estava inacessível. | Tente novamente com backoff. |

## Códigos de erro

***

As tabelas abaixo listam os códigos que o Lender retorna. `title` é o nome do status HTTP, e `detail` descreve o caso específico para uma pessoa, então ramifique por `code`, não por `detail`.

### Geral

| Código | Status | Recusa |
| - | - | - |
| `LENDER-0000` | `500` Internal Server Error | O Lender não conseguiu classificar a falha. Trate-a como um erro de servidor. |

### Produtos

| Código | Status | Recusa |
| - | - | - |
| `LENDER-0101` | `409` Conflict | O produto de empréstimo não está ativo, então você não pode trocar a versão atual dele. |
| `LENDER-0102` | `422` Unprocessable Entity | A versão que você informou não é uma versão deste produto de empréstimo. |
| `LENDER-0103` | `400` Bad Request | `chargeEffectiveAt` ou `accountCreatedAt` é uma data de calendário. Envie um instante RFC 3339. |

### Originação

| Código | Status | Recusa |
| - | - | - |
| `LENDER-0201` | `409` Conflict | A proposta já foi desembolsada, e este desembolso não declara `trancheNumber`. |
| `LENDER-0202` | `422` Unprocessable Entity | O valor do desembolso ou o `trancheNumber` dele contradiz o valor aprovado. |
| `LENDER-0203` | `404` Not Found | Nenhuma proposta de empréstimo do seu tenant tem este identificador. |
| `LENDER-0204` | `409` Conflict | Outra requisição alterou esta proposta antes. Nada foi gravado. |
| `LENDER-0205` | `409` Conflict | Um desembolso diferente já usa esta chave de idempotência. |
| `LENDER-0206` | `403` Forbidden | O subject autenticado não pode executar esta ação nesta proposta. |
| `LENDER-0207` | `422` Unprocessable Entity | O Lender não consegue resolver o perfil da versão de produto de que este desembolso precisa. |
| `LENDER-0208` | `422` Unprocessable Entity | O valor líquido não é igual ao bruto menos as retenções, menos a tarifa de originação. |
| `LENDER-0209` | `422` Unprocessable Entity | A tarifa de originação é igual ou maior que o valor que sobra depois das retenções. |
| `LENDER-0210` | `422` Unprocessable Entity | O produto retém uma tarifa de originação que a base de apropriação dele não consegue amortizar. |
| `LENDER-0211` | `409` Conflict | A conta de empréstimo já tem uma proposta de empréstimo. |
| `LENDER-0212` | `422` Unprocessable Entity | Um campo da requisição está malformado. |
| `LENDER-0213` | `409` Conflict | A ação não é permitida a partir do status atual da proposta. `detail` informa o status. |
| `LENDER-0214` | `422` Unprocessable Entity | O instante de pagamento de uma contraparte está mais adiantado que o relógio do Lender além da diferença permitida. |
| `LENDER-0215` | `422` Unprocessable Entity | A taxa solicitada está fora da faixa de taxa da versão de produto. |
| `LENDER-0216` | `422` Unprocessable Entity | A versão de produto não declara faixa de taxa. |
| `LENDER-0217` | `422` Unprocessable Entity | A moeda da requisição de desembolso não é a moeda da proposta. |
| `LENDER-0218` | `422` Unprocessable Entity | O lançamento de abertura que a requisição de reprogramação cita não corresponde a este contrato. |
| `LENDER-0219` | `422` Unprocessable Entity | Um campo de valor ou de taxa da prévia de cronograma não é decimal. |
| `LENDER-0220` | `422` Unprocessable Entity | Uma string decimal da prévia de cronograma é mais longa do que o Lender aceita. |
| `LENDER-0221` | `422` Unprocessable Entity | Um decimal da prévia de cronograma tem um expoente fora da faixa aceita. |
| `LENDER-0222` | `503` Service Unavailable | O deploy não tem leitor de propostas de empréstimo para esta rota. |
| `LENDER-0223` | `503` Service Unavailable | A prévia de cronograma não está configurada neste deploy. |
| `LENDER-0224` | `503` Service Unavailable | O deploy não consegue executar a liberação de que uma renegociação substancial precisa. |
| `LENDER-0225` | `422` Unprocessable Entity | O produto de empréstimo desta proposta não está ativo. |
| `LENDER-0226` | `422` Unprocessable Entity | A versão que você informou não é a versão atual do produto. |
| `LENDER-0227` | `422` Unprocessable Entity | O `jurisdictionExtensions` do desembolso não traz `disbursedAt`. |
| `LENDER-0228` | `422` Unprocessable Entity | A versão de produto não admite o tipo de tomador da proposta. |
| `LENDER-0229` | `422` Unprocessable Entity | O primeiro vencimento cai no dia do desembolso ou antes dele. |
| `LENDER-0230` | `422` Unprocessable Entity | A proposta não declara tipo de tomador, e a operação precisa de um. |
| `LENDER-0231` | `422` Unprocessable Entity | O primeiro vencimento é tão tardio que a primeira parcela não amortiza principal. |
| `LENDER-0232` | `422` Unprocessable Entity | A requisição define um primeiro vencimento e uma carência ao mesmo tempo. |
| `LENDER-0233` | `422` Unprocessable Entity | O deploy não precifica tributo para o tipo de tomador da proposta. |
| `LENDER-0234` | `422` Unprocessable Entity | O cronograma gerou um período de zero dias ou menos no calendário da jurisdição. |
| `LENDER-0235` | `422` Unprocessable Entity | A versão de produto não admite o primeiro vencimento escolhido. |
| `LENDER-0236` | `422` Unprocessable Entity | A proposta cita uma oferta de cronograma que não está registrada. |

### Gestão da carteira

| Código | Status | Recusa |
| - | - | - |
| `LENDER-0301` | `422` Unprocessable Entity | O Lender não consegue ler a requisição como um pagamento: o valor não é positivo ou tem precisão abaixo do centavo, a chave de idempotência falta ou o instante é inválido. |
| `LENDER-0302` | `409` Conflict | O pagamento tem data anterior a fatos que a conta de empréstimo já liquidou. |
| `LENDER-0303` | `409` Conflict | Um pagamento diferente já usa esta chave de idempotência. |
| `LENDER-0304` | `409` Conflict | A distribuição por parcela aloca mais do que a parcela deve. |
| `LENDER-0305` | `404` Not Found | Nenhuma conta de empréstimo ativa tem este identificador. |
| `LENDER-0306` | `409` Conflict | A conta de empréstimo tem mais de uma proposta viva, então o plano de contas dela é ambíguo. |
| `LENDER-0307` | `422` Unprocessable Entity | A versão do produto de empréstimo não tem perfil contábil. |
| `LENDER-0308` | `422` Unprocessable Entity | O plano de contas do produto não consegue expressar esta movimentação. |
| `LENDER-0309` | `422` Unprocessable Entity | A movimentação não pode ser expressa como um lançamento no ledger pelo perfil contábil do produto. |
| `LENDER-0310` | `503` Service Unavailable | Um componente de que esta movimentação precisa não está configurado no deploy. |
| `LENDER-0311` | `404` Not Found | O pagamento a estornar não está nesta conta de empréstimo. |
| `LENDER-0312` | `409` Conflict | O pagamento já tem um estorno. |
| `LENDER-0313` | `422` Unprocessable Entity | Um pagamento com data posterior ao que você estorna consta no contrato. |
| `LENDER-0314` | `422` Unprocessable Entity | O cronograma mudou depois do pagamento que você estorna. |
| `LENDER-0315` | `422` Unprocessable Entity | Um pagamento posterior e uma versão de cronograma posterior constam no contrato. |
| `LENDER-0316` | `409` Conflict | Um estorno diferente já usa esta chave de idempotência. |
| `LENDER-0317` | `422` Unprocessable Entity | A requisição de estorno não traz os fatos de linhagem de que precisa. |
| `LENDER-0318` | `403` Forbidden | Nenhuma identidade validada chegou à leitura, então o Lender não consegue delimitá-la. |
| `LENDER-0319` | `409` Conflict | O empréstimo não tem uma única proposta viva, então o lançamento compensatório não tem plano de contas. |
| `LENDER-0320` | `409` Conflict | O Lender não consegue determinar se o pagamento original chegou ao ledger. |
| `LENDER-0321` | `422` Unprocessable Entity | A página ou o filtro solicitado não é válido. |
| `LENDER-0322` | `409` Conflict | Uma liquidação anterior já usou parte ou todo este abatimento. |
| `LENDER-0323` | `422` Unprocessable Entity | O pagamento devolvido trazia caixa não aplicado, então ele não pode virar um recebível. |
| `LENDER-0324` | `404` Not Found | Nenhum recebível de pagamento devolvido tem este identificador. |
| `LENDER-0325` | `409` Conflict | O recebível já foi cobrado. |
| `LENDER-0326` | `422` Unprocessable Entity | A cobrança não pode ser aplicada como foi enviada. |
| `LENDER-0327` | `422` Unprocessable Entity | O pagamento que você estorna não registrou nada. |
| `LENDER-0328` | `503` Service Unavailable | A liquidação não está configurada neste deploy. |
| `LENDER-0329` | `404` Not Found | A versão de cronograma que você informou não está neste contrato. |
| `LENDER-0330` | `422` Unprocessable Entity | Um campo da requisição de liquidação ou de reprogramação está malformado. |
| `LENDER-0331` | `422` Unprocessable Entity | Este contrato só é liquidado contra uma cotação de pagamento antecipado, e a requisição não tem nenhuma. |
| `LENDER-0332` | `422` Unprocessable Entity | A liquidação é de mais principal do que o contrato deve. |
| `LENDER-0333` | `422` Unprocessable Entity | A versão de cronograma traz juros e nenhuma taxa. |
| `LENDER-0334` | `422` Unprocessable Entity | A rodada de apropriação não consegue reconhecer os meses que este cronograma cria. |
| `LENDER-0335` | `422` Unprocessable Entity | O produto não tem regra para o ganho ou a perda de uma renegociação substancial. |
| `LENDER-0336` | `422` Unprocessable Entity | O produto não tem regra de baixa ou de reconhecimento. |
| `LENDER-0337` | `422` Unprocessable Entity | Os termos do contrato substituto estão incompletos. |
| `LENDER-0338` | `422` Unprocessable Entity | A modificação é substancial (Res. CMN 4.966 art. 22), então ela não é um cronograma sucessor deste contrato. |
| `LENDER-0339` | `422` Unprocessable Entity | O cronograma não consegue colocar a primeira parcela na data solicitada. |
| `LENDER-0340` | `422` Unprocessable Entity | O contrato não tem valor contábil positivo para renegociar. |
| `LENDER-0341` | `422` Unprocessable Entity | Um contrato com desconto em folha não pode ser renegociado de forma substancial. |
| `LENDER-0342` | `409` Conflict | Uma requisição de versão de cronograma diferente já usa esta chave de idempotência. |
| `LENDER-0343` | `409` Conflict | O contrato já saiu da carteira: ele foi liquidado, cedido ou portado. |
| `LENDER-0344` | `409` Conflict | Já existe uma renegociação substancial deste contrato. |
| `LENDER-0345` | `409` Conflict | O outbox colocou em quarentena um lançamento deste contrato. |
| `LENDER-0346` | `409` Conflict | Um lançamento deste contrato foi publicado, e o ledger não o confirmou. |
| `LENDER-0347` | `409` Conflict | Um lançamento deste contrato está em trânsito, e a confirmação dele não chegou. |
| `LENDER-0348` | `400` Bad Request | O instante do pagamento é uma data de calendário. Envie um instante RFC 3339. |

### Contabilidade

| Código | Status | Recusa |
| - | - | - |
| `LENDER-0401` | `503` Service Unavailable | Nenhuma varredura de transferência de saldos do plano está configurada, então uma troca de plano não consegue mover saldos. |
| `LENDER-0402` | `503` Service Unavailable | O Lender não conseguiu ler o ledger, então a varredura não moveu nada. |
| `LENDER-0403` | `409` Conflict | A troca de plano é recusada, porque o deploy não consegue mover os saldos que ela deixaria para trás. |
| `LENDER-0404` | `409` Conflict | Um contrato não tem ativo no ledger, então o Lender não consegue ler os saldos dele. |
| `LENDER-0405` | `409` Conflict | A retentativa reconstruiu um lançamento diferente do que já está na fila para o mesmo reconhecimento. |
| `LENDER-0406` | `422` Unprocessable Entity | O plano pode desviar um pagamento final devolvido, e não tem as regras para provisionar e baixar essa dívida. |
| `LENDER-0407` | `422` Unprocessable Entity | Alguns identificadores de item selecionados para a retentativa não pertencem à rodada de apropriação. `errors[].value` informa até dez deles. |
| `LENDER-0408` | `422` Unprocessable Entity | O produto registra este contrato em contas que ele compartilha com outros contratos, então a saída não pode ser medida. |
| `LENDER-0409` | `409` Conflict | O ledger retém fundos nas contas deste contrato. |
| `LENDER-0410` | `503` Service Unavailable | O Lender não conseguiu ler o ledger. |
| `LENDER-0411` | `422` Unprocessable Entity | O produto registra a tarifa de originação diferida em uma conta compartilhada. |
| `LENDER-0412` | `409` Conflict | As contas de tarifa diferida do contrato trazem uma linha que nenhuma categoria de conciliação cobre. |
| `LENDER-0413` | `422` Unprocessable Entity | A conciliação de tarifa diferida não informa conta de empréstimo. |
| `LENDER-0414` | `409` Conflict | As transferências de saldo do plano nas contas de tarifa diferida não somam zero. |
| `LENDER-0415` | `404` Not Found | Nenhum contrato desembolsado do seu tenant tem esta conta de empréstimo. |
| `LENDER-0416` | `409` Conflict | Mais de uma proposta reivindica esta conta de empréstimo. |
| `LENDER-0417` | `422` Unprocessable Entity | Nenhum plano da versão de produto estava vigente no dia em que a primeira tranche foi desembolsada. |
| `LENDER-0418` | `422` Unprocessable Entity | Um plano armazenado do produto falha na validação do perfil contábil. |
| `LENDER-0419` | `422` Unprocessable Entity | O produto registra o tributo sobre receita (PIS/COFINS) em uma conta por contrato. |

### Cessão de recebíveis

| Código | Status | Recusa |
| - | - | - |
| `LENDER-0501` | `422` Unprocessable Entity | O valor de quitação acordado com o fundo excede o valor de face das parcelas que o fundo ainda detém. |
| `LENDER-0502` | `422` Unprocessable Entity | O valor de quitação acordado com o fundo é zero ou menos. |
| `LENDER-0503` | `422` Unprocessable Entity | A venda envia um campo de retenção sem valor: `retainedFraction` é nulo ou vazio, ou `sellerRetainsControl` é nulo. |
| `LENDER-0504` | `422` Unprocessable Entity | A fração retida atinge o limite de retenção substancial. O Lender monta uma venda apenas quando a fração está abaixo dele. |
| `LENDER-0505` | `422` Unprocessable Entity | O vendedor retém o controle do que vendeu (Res. CMN 4.966 art. 26 III). O Lender não registra esse tipo de venda. |
| `LENDER-0506` | `422` Unprocessable Entity | Uma fração retida não é uma string decimal de 0 a 1 com no máximo 8 casas decimais. |

### Auditoria

| Código | Status | Recusa |
| - | - | - |
| `LENDER-0801` | `503` Service Unavailable | O armazenamento do histórico de auditoria do empréstimo não tem banco de dados por trás. |

### Brasil

| Código | Status | Recusa |
| - | - | - |
| `LENDER-0900` | `422` Unprocessable Entity | A tabela de alíquotas do deploy não tem alíquota de IOF para o tipo de tomador. |
| `LENDER-0901` | `422` Unprocessable Entity | A declaração de ativo problemático não informa artigo de norma. |
| `LENDER-0902` | `422` Unprocessable Entity | A declaração não informa a fonte. |
| `LENDER-0903` | `422` Unprocessable Entity | A declaração não cita evidência. |
| `LENDER-0904` | `422` Unprocessable Entity | A declaração não tem signatário: nenhuma identidade validada chegou a ela, e ela não informa subject declarante. |
| `LENDER-0905` | `422` Unprocessable Entity | A declaração não é válida por outro motivo: uma data de avaliação no futuro, a falta de chave de idempotência ou um campo acima do limite de tamanho. |
| `LENDER-0906` | `404` Not Found | Nenhuma conta de empréstimo do seu tenant tem este identificador. |
| `LENDER-0907` | `409` Conflict | Esta chave de idempotência já registrou uma declaração. |
| `LENDER-0908` | `403` Forbidden | Nenhuma identidade de tenant validada chegou à rota de declaração. |
| `LENDER-0909` | `503` Service Unavailable | O armazenamento de declarações está inacessível. |
| `LENDER-0910` | `422` Unprocessable Entity | Nenhuma varredura de reavaliação concluída cobre essa data de referência. |
| `LENDER-0911` | `422` Unprocessable Entity | `businessDate` não é uma data `YYYY-MM-DD`. |
| `LENDER-0912` | `503` Service Unavailable | O deploy não tem gerador de cronograma para a cotação de tributos brasileira. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.