Pular para o conteúdo
LinkProfit

Bibliotecas de cliente

Clientes oficiais do LinkProfit para Node, Python e PHP: um contrato único de novas tentativas, idempotência e paginação, com início rápido em cada linguagem.

Atualizado em 14 de agosto de 2026

A API REST é HTTP e JSON puros, e uma chamada de fetch já é uma forma perfeitamente boa de usá-la. As bibliotecas de cliente existem para as partes que ninguém gosta de escrever duas vezes: repetir corretamente uma requisição barrada pelo limite, tornar segura uma criação repetida e percorrer um cursor até o fim de uma lista.

Três bibliotecas, um contrato:

| Linguagem | Pacote | Código-fonte | | --- | --- | --- | | Node.js / TypeScript | @linkprofit/sdk | packages/sdk-node | | Python | linkprofit | sdk/python | | PHP | linkprofit/linkprofit-php | sdk/php |

Instalação

Os pacotes ainda não estão no npm, no PyPI nem no Packagist. A publicação depende das contas nesses registros; o código está completo e já pode ser instalado a partir de uma cópia local do repositório, e os comandos abaixo viram uma única linha npm install @linkprofit/sdk (e seus equivalentes) assim que as contas existirem.

Node, a partir de uma cópia local do repositório:

npm install /path/to/linkprofit/packages/sdk-node

Python, a partir de uma cópia local do repositório:

pip install /path/to/linkprofit/sdk/python

PHP, por um repositório do tipo path do Composer no seu composer.json:

{
  "repositories": [
    { "type": "path", "path": "/path/to/linkprofit/sdk/php" }
  ],
  "require": {
    "linkprofit/linkprofit-php": "*"
  }
}

O que as três fazem do mesmo jeito

As bibliotecas são propositalmente sem graça e propositalmente parecidas. Aprenda o comportamento uma vez e ele vale em todas as linguagens.

Autenticação. Você passa uma chave de espaço de trabalho (lp_live_…); o cliente define o cabeçalho Authorization em toda requisição. A URL base é uma opção, então o mesmo código pode rodar contra uma instância local nos testes. Veja Autenticação para escopos e rotação.

Novas tentativas que respeitam o servidor. Um 429 ou um 5xx transitório é repetido com backoff, e o Retry-After é respeitado em vez de adivinhado — o servidor já sabe quando a janela se libera. O número de tentativas tem teto, e uma requisição que falha por mérito próprio (validation_failed, conflict, not_found) nunca é repetida: repetir uma requisição errada só desperdiça o orçamento do limite de requisições.

Mutações idempotentes. Toda chamada que altera dados leva uma Idempotency-Key, então uma nova tentativa depois de um tempo limite de rede devolve a resposta armazenada em vez de criar um segundo link. Você pode fornecer a sua própria chave — o id de um pedido, o id de um job — quando a nova tentativa pode vir de outro processo ou de uma execução posterior. As chaves ficam armazenadas por 24 horas; a mesma chave com um corpo diferente responde 409.

Paginação por cursor como iterador. Os endpoints de listagem são paginados por cursor, e os clientes os expõem como iteradores: você percorre os links, o cliente busca a página seguinte quando a atual acaba e para quando o cursor é null. Sem aritmética de páginas, sem o risco do erro de um a mais que descarta uma linha em silêncio.

Erros como exceções. As falhas levantam o tipo de erro natural da linguagem, carregando o code da API, a mensagem legível e, nas falhas de validação, os details por campo. Ramifique conforme o código, e não conforme o texto da mensagem — os códigos são o contrato documentado.

Os tipos de requisição e de resposta do cliente Node são gerados a partir do mesmo documento OpenAPI que a referência renderiza — publicado em /openapi.json —, então os tipos não conseguem se afastar da API em execução. Os clientes Python e PHP seguem o mesmo documento à mão, no estilo idiomático de cada linguagem.

Início rápido

Cada pacote traz um README com a sua superfície completa; os trechos abaixo mostram o formato que as três compartilham — construa um cliente com uma chave, chame o grupo de recursos, receba de volta um objeto tipado.

Node

import { LinkProfit } from "@linkprofit/sdk";

const client = new LinkProfit({ apiKey: process.env.LINKPROFIT_API_KEY });

const created = await client.createLink({
  url: "https://example.com/summer-sale",
  title: "Summer sale",
});

console.log(created.data.short_url);

Python

import os

from linkprofit import LinkProfit

client = LinkProfit(os.environ["LINKPROFIT_API_KEY"])

created = client.create_link(
    {"url": "https://example.com/summer-sale", "title": "Summer sale"}
)

print(created["data"]["short_url"])

PHP

<?php

require __DIR__ . '/vendor/autoload.php';

use LinkProfit\LinkProfit;

$client = new LinkProfit(getenv('LINKPROFIT_API_KEY'));

$created = $client->createLink([
    'url' => 'https://example.com/summer-sale',
    'title' => 'Summer sale',
]);

echo $created['data']['short_url'];

Qual delas eu devo usar

  • Node / TypeScript — a superfície mais completa, porque os seus tipos vêm direto do documento OpenAPI. A escolha natural para um backend JavaScript, uma função serverless ou um script de build.
  • Python — para relatórios e trabalho com dados: puxe o analytics para um notebook, um job agendado ou o alimentador de um painel.
  • PHP — para o mundo dos CMS. Um plugin do WordPress ou um serviço Laravel que encurta links conforme o conteúdo é publicado.
  • Nenhuma delas — se a sua linguagem for outra, a API é HTTP comum. O início rápido começa pelo curl, e tudo o que os clientes fazem (novas tentativas, idempotência, cursores) é comportamento documentado que você implementa em cinquenta linhas.

Qualquer que seja a sua escolha, a referência da API é a lista completa de endpoints, campos e códigos de erro — as bibliotecas são uma conveniência em cima dela, nunca uma API diferente.

Também vale a leitura

  • Limites de requisições — o orçamento dentro do qual a lógica de novas tentativas trabalha.
  • Webhooks — receba os eventos empurrados até você em vez de ficar consultando.
  • Servidor MCP — as mesmas operações a partir de um assistente de IA.