Desenvolvedores

Referência da API para desenvolvedores

Uma chave de API é necessária para que as solicitações sejam processadas pelo sistema. Quando um usuário se registra, uma chave de API é gerada automaticamente para ele.

Primeiros passos

Uma chave de API é necessária para que as solicitações sejam processadas pelo sistema. Quando um usuário se registra, uma chave de API é gerada automaticamente para ele. A chave de API deve ser enviada com cada solicitação (veja o exemplo completo abaixo). Se a chave de API não for enviada ou estiver expirada, ocorrerá um erro. Mantenha sua chave de API em segredo para evitar abusos.

Autenticação

Para se autenticar no sistema de API, envie sua chave de API como token de autorização em cada solicitação. Veja um exemplo de código abaixo.

curl --location --request POST 'http://josefrancoapps.com/api/account' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \ 

Limite de requisições

Nossa API possui um limitador de taxa para protegê-la contra picos de solicitações e maximizar sua estabilidade. Atualmente, o limite é de 30 solicitações por 1 minuto. Observe que o valor pode mudar de acordo com o plano contratado.

Vários cabeçalhos serão enviados junto com a resposta e podem ser analisados para obter diversas informações sobre a solicitação.

X-RateLimit-Limit: 30X-RateLimit-Remaining: 29X-RateLimit-Reset: TIMESTAMP

Tratamento de respostas

Por padrão, todas as respostas da API são retornadas no formato JSON. Para convertê-las em dados utilizáveis, use a função apropriada para a linguagem. Em PHP, a função json_decode() pode ser usada para converter os dados em um objeto (padrão) ou em um array (defina o segundo parâmetro como true). É muito importante verificar a chave error, pois ela informa se ocorreu um erro. Você também pode verificar o código do cabeçalho.

{
    "error": 1,
    "message": "An error occurred"
}

Account

Get Account

GET http://josefrancoapps.com/api/account

To get information on the account, you can send a request to this endpoint and it will return data on the account.

curl --location --request GET 'http://josefrancoapps.com/api/account' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": 0,
    "data": {
        "id": 1,
        "email": "[email protected]",
        "username": "sampleuser",
        "avatar": "https:\/\/domain.com\/content\/avatar.png",
        "status": "pro",
        "expires": "2022-11-15 15:00:00",
        "registered": "2020-11-10 18:01:43"
    }
}

Update Account

PUT http://josefrancoapps.com/api/account/update

To update information on the account, you can send a request to this endpoint and it will update data on the account.

curl --location --request PUT 'http://josefrancoapps.com/api/account/update' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "email": "[email protected]",
    "password": "NewPassword1"
}'

Resposta do servidor

{
    "error": 0,
    "message": "Account has been successfully updated."
}

Campanhas

List Campaigns

GET http://josefrancoapps.com/api/campaigns?limit=2&page=1

To get your campaigns via the API, you can use this endpoint. You can also filter data (See table for more info).

Parâmetro Descrição
limit (opcional) Resultados de dados por página
page (opcional) Solicitação da página atual
curl --location --request GET 'http://josefrancoapps.com/api/campaigns?limit=2&page=1' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": "0",
    "data": {
        "result": 2,
        "perpage": 2,
        "currentpage": 1,
        "nextpage": 1,
        "maxpage": 1,
        "campaigns": [
            {
                "id": 1,
                "name": "Sample Campaign",
                "public": false,
                "rotator": false,
                "list": "https:\/\/domain.com\/u\/admin\/list-1"
            },
            {
                "id": 2,
                "domain": "Facebook Campaign",
                "public": true,
                "rotator": "https:\/\/domain.com\/r\/test",
                "list": "https:\/\/domain.com\/u\/admin\/test-2"
            }
        ]
    }
}

Criar uma campanha

POST http://josefrancoapps.com/api/campaign/add

A campaign can be added using this endpoint.

Parâmetro Descrição
name (optional) Campaign name
slug (optional) Rotator Slug
public (optional) Access
curl --location --request POST 'http://josefrancoapps.com/api/campaign/add' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "New Campaign",
    "slug": "new-campaign",
    "public": true
}'

Resposta do servidor

{
    "error": 0,
    "id": 3,
    "domain": "New Campaign",
    "public": true,
    "rotator": "https:\/\/domain.com\/r\/new-campaign",
    "list": "https:\/\/domain.com\/u\/admin\/new-campaign-3"
}
POST http://josefrancoapps.com/api/campaign/:campaignid/assign/:linkid

A short link can be assigned to a campaign using this endpoint. The endpoint requires the campaign ID and the short link ID.

curl --location --request POST 'http://josefrancoapps.com/api/campaign/:campaignid/assign/:linkid' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": 0,
    "message": "Link successfully added to the campaign."
}

Atualizar campanha

PUT http://josefrancoapps.com/api/campaign/:id/update

To update a campaign, you need to send a valid data in JSON via a PUT request. The data must be sent as the raw body of your request as shown below. The example below shows all the parameters you can send but you are not required to send all (See table for more info).

Parâmetro Descrição
name (required) Campaign name
slug (optional) Rotator Slug
public (optional) Access
curl --location --request PUT 'http://josefrancoapps.com/api/campaign/:id/update' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "Twitter Campaign",
    "slug": "twitter-campaign",
    "public": true
}'

Resposta do servidor

{
    "error": 0,
    "id": 3,
    "domain": "Twitter Campaign",
    "public": true,
    "rotator": "https:\/\/domain.com\/r\/twitter-campaign",
    "list": "https:\/\/domain.com\/u\/admin\/twitter-campaign-3"
}

Delete Campaign

DELETE http://josefrancoapps.com/api/campaign/:id/delete

To delete a campaign, you need to send a DELETE request.

curl --location --request DELETE 'http://josefrancoapps.com/api/campaign/:id/delete' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": 0,
    "message": "Campaign has been deleted successfully."
}

List Channels

GET http://josefrancoapps.com/api/channels?limit=2&page=1

To get your channels via the API, you can use this endpoint. You can also filter data (See table for more info).

Parâmetro Descrição
limit (opcional) Resultados de dados por página
page (opcional) Solicitação da página atual
curl --location --request GET 'http://josefrancoapps.com/api/channels?limit=2&page=1' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": "0",
    "data": {
        "result": 2,
        "perpage": 2,
        "currentpage": 1,
        "nextpage": 1,
        "maxpage": 1,
        "channels": [
            {
                "id": 1,
                "name": "Channel 1",
                "description": "Description of channel 1",
                "color": "#000000",
                "starred": true
            },
            {
                "id": 2,
                "name": "Channel 2",
                "description": "Description of channel 2",
                "color": "#FF0000",
                "starred": false
            }
        ]
    }
}

List Channel Items

GET http://josefrancoapps.com/api/channel/:id?limit=1&page=1

To get items in a select channels via the API, you can use this endpoint. You can also filter data (See table for more info).

Parâmetro Descrição
limit (opcional) Resultados de dados por página
page (opcional) Solicitação da página atual
curl --location --request GET 'http://josefrancoapps.com/api/channel/:id?limit=1&page=1' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": "0",
    "data": {
        "result": 2,
        "perpage": 2,
        "currentpage": 1,
        "nextpage": 1,
        "maxpage": 1,
        "items": [
            {
                "type": "links",
                "id": 1,
                "title": "My Sample Link",
                "preview": "https:\/\/google.com",
                "link": "http:\/\/josefrancoapps.com\/google",
                "date": "2022-05-12"
            },
            {
                "type": "bio",
                "id": 1,
                "title": "My Sample Bio",
                "preview": "http:\/\/josefrancoapps.com\/mybio",
                "link": "http:\/\/josefrancoapps.com\/mybio",
                "date": "2022-06-01"
            }
        ]
    }
}

Criar um canal

POST http://josefrancoapps.com/api/channel/add

A channel can be added using this endpoint.

Parâmetro Descrição
name (required) Channel name
description (optional) Channel description
color (optional) Channel badge color (HEX)
starred (optional) Star the channel or not (true or false)
curl --location --request POST 'http://josefrancoapps.com/api/channel/add' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "New Channel",
    "description": "my new channel",
    "color": "#000000",
    "starred": true
}'

Resposta do servidor

{
    "error": 0,
    "id": 3,
    "name": "New Channel",
    "description": "my new channel",
    "color": "#000000",
    "starred": true
}

Assign an Item to a Channel

POST http://josefrancoapps.com/api/channel/:channelid/assign/:type/:itemid

An item can be assigned to any channel by sending a request with the channel id, item type (links, bio or qr) and item id.

Parâmetro Descrição
:channelid (required) Channel ID
:type (required) links or bio or qr
:itemid (required) Item ID
curl --location --request POST 'http://josefrancoapps.com/api/channel/:channelid/assign/:type/:itemid' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": 0,
    "message": "Item successfully added to the channel."
}

Atualizar canal

PUT http://josefrancoapps.com/api/channel/:id/update

To update a channel, you need to send a valid data in JSON via a PUT request. The data must be sent as the raw body of your request as shown below. The example below shows all the parameters you can send but you are not required to send all (See table for more info).

Parâmetro Descrição
name (optional) Channel name
description (optional) Channel description
color (optional) Channel badge color (HEX)
starred (optional) Star the channel or not (true or false)
curl --location --request PUT 'http://josefrancoapps.com/api/channel/:id/update' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "Acme Corp",
    "description": "channel for items for Acme Corp",
    "color": "#FFFFFF",
    "starred": false
}'

Resposta do servidor

{
    "error": 0,
    "message": "Channel has been updated successfully."
}

Delete Channel

DELETE http://josefrancoapps.com/api/channel/:id/delete

To delete a channel, you need to send a DELETE request. All items will be unassigned as well.

curl --location --request DELETE 'http://josefrancoapps.com/api/channel/:id/delete' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": 0,
    "message": "Channel has been deleted successfully."
}

Códigos QR

List QR codes

GET http://josefrancoapps.com/api/qr?limit=2&page=1

To get your QR codes via the API, you can use this endpoint. You can also filter data (See table for more info).

Parâmetro Descrição
limit (opcional) Resultados de dados por página
page (opcional) Solicitação da página atual
curl --location --request GET 'http://josefrancoapps.com/api/qr?limit=2&page=1' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": "0",
    "data": {
        "result": 2,
        "perpage": 2,
        "currentpage": 1,
        "nextpage": 1,
        "maxpage": 1,
        "qrs": [
            {
                "id": 2,
                "link": "http:\/\/josefrancoapps.com\/qr\/a2d5e",
                "scans": 0,
                "name": "Google",
                "date": "2020-11-10 18:01:43"
            },
            {
                "id": 1,
                "link": "http:\/\/josefrancoapps.com\/qr\/b9edfe",
                "scans": 5,
                "name": "Google Canada",
                "date": "2020-11-10 18:00:25"
            }
        ]
    }
}

Get a single QR Code

GET http://josefrancoapps.com/api/qr/:id

To get details for a single QR code via the API, you can use this endpoint.

curl --location --request GET 'http://josefrancoapps.com/api/qr/:id' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": 0,
    "details": {
        "id": 1,
        "link": "http:\/\/josefrancoapps.com\/qr\/b9edfe",
        "scans": 5,
        "name": "Google Canada",
        "date": "2020-11-10 18:00:25"
    },
    "data": {
        "clicks": 1,
        "uniqueClicks": 1,
        "topCountries": {
            "Unknown": "1"
        },
        "topReferrers": {
            "Direct, email and other": "1"
        },
        "topBrowsers": {
            "Chrome": "1"
        },
        "topOs": {
            "Windows 10": "1"
        },
        "socialCount": {
            "facebook": 0,
            "twitter": 0,
            "instagram": 0
        }
    }
}

Create a QR Code

POST http://josefrancoapps.com/api/qr/add

To create a QR Code, you need to send a valid data in JSON via a POST request. The data must be sent as the raw body of your request as shown below. The example below shows all the parameters you can send but you are not required to send all (See table for more info).

Parâmetro Descrição
type (required) text | vcard | link | email | phone | sms | wifi
data (required) Data to be embedded inside the QR code. The data can be string or array depending on the type
background (optional) RGB color e.g. rgb(255,255,255)
foreground (optional) RGB color e.g. rgb(0,0,0)
logo (optional) Path to the logo either png or jpg
name (optional) QR Code name
curl --location --request POST 'http://josefrancoapps.com/api/qr/add' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "type": "link",
    "data": "https:\/\/google.com",
    "background": "rgb(255,255,255)",
    "foreground": "rgb(0,0,0)",
    "logo": "https:\/\/site.com\/logo.png",
    "name": "QR Code API"
}'

Resposta do servidor

{
    "error": 0,
    "id": 3,
    "link": "http:\/\/josefrancoapps.com\/qr\/a58f79"
}

Update QR Code

PUT http://josefrancoapps.com/api/qr/:id/update

To update a QR Code, you need to send a valid data in JSON via a PUT request. The data must be sent as the raw body of your request as shown below. The example below shows all the parameters you can send but you are not required to send all (See table for more info).

Parâmetro Descrição
data (required) Data to be embedded inside the QR code. The data can be string or array depending on the type
background (optional) RGB color e.g. rgb(255,255,255)
foreground (optional) RGB color e.g. rgb(0,0,0)
logo (optional) Path to the logo either png or jpg
curl --location --request PUT 'http://josefrancoapps.com/api/qr/:id/update' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "type": "link",
    "data": "https:\/\/google.com",
    "background": "rgb(255,255,255)",
    "foreground": "rgb(0,0,0)",
    "logo": "https:\/\/site.com\/logo.png"
}'

Resposta do servidor

{
    "error": 0,
    "message": "QR has been updated successfully."
}

Delete a QR Code

DELETE http://josefrancoapps.com/api/qr/:id/delete

To delete a QR code, you need to send a DELETE request.

curl --location --request DELETE 'http://josefrancoapps.com/api/qr/:id/delete' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": 0,
    "message": "QR Code has been deleted successfully."
}

Domínios personalizados

List Branded Domains

GET http://josefrancoapps.com/api/domains?limit=2&page=1

To get your branded domains via the API, you can use this endpoint. You can also filter data (See table for more info).

Parâmetro Descrição
limit (opcional) Resultados de dados por página
page (opcional) Solicitação da página atual
curl --location --request GET 'http://josefrancoapps.com/api/domains?limit=2&page=1' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": "0",
    "data": {
        "result": 2,
        "perpage": 2,
        "currentpage": 1,
        "nextpage": 1,
        "maxpage": 1,
        "domains": [
            {
                "id": 1,
                "domain": "https:\/\/domain1.com",
                "redirectroot": "https:\/\/rootdomain.com",
                "redirect404": "https:\/\/rootdomain.com\/404"
            },
            {
                "id": 2,
                "domain": "https:\/\/domain2.com",
                "redirectroot": "https:\/\/rootdomain2.com",
                "redirect404": "https:\/\/rootdomain2.com\/404"
            }
        ]
    }
}

Create a Branded Domain

POST http://josefrancoapps.com/api/domain/add

A domain can be added using this endpoint. Please make sure the domain is correctly pointed to our server.

Parâmetro Descrição
domain (required) Branded domain including http or https
redirectroot (optional) Root redirect when someone visits your domain
redirect404 (optional) Custom 404 redirect
curl --location --request POST 'http://josefrancoapps.com/api/domain/add' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "domain": "https:\/\/domain1.com",
    "redirectroot": "https:\/\/rootdomain.com",
    "redirect404": "https:\/\/rootdomain.com\/404"
}'

Resposta do servidor

{
    "error": 0,
    "id": 1
}

Atualizar domínio

PUT http://josefrancoapps.com/api/domain/:id/update

To update a branded domain, you need to send a valid data in JSON via a PUT request. The data must be sent as the raw body of your request as shown below. The example below shows all the parameters you can send but you are not required to send all (See table for more info).

Parâmetro Descrição
redirectroot (optional) Root redirect when someone visits your domain
redirect404 (optional) Custom 404 redirect
curl --location --request PUT 'http://josefrancoapps.com/api/domain/:id/update' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "redirectroot": "https:\/\/rootdomain-new.com",
    "redirect404": "https:\/\/rootdomain-new.com\/404"
}'

Resposta do servidor

{
    "error": 0,
    "message": "Domain has been updated successfully."
}

Delete Domain

DELETE http://josefrancoapps.com/api/domain/:id/delete

To delete a domain, you need to send a DELETE request.

curl --location --request DELETE 'http://josefrancoapps.com/api/domain/:id/delete' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": 0,
    "message": "Domain has been deleted successfully."
}

List Pixels

GET http://josefrancoapps.com/api/pixels?limit=2&page=1

To get your pixels codes via the API, you can use this endpoint. You can also filter data (See table for more info).

Parâmetro Descrição
limit (opcional) Resultados de dados por página
page (opcional) Solicitação da página atual
curl --location --request GET 'http://josefrancoapps.com/api/pixels?limit=2&page=1' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": "0",
    "data": {
        "result": 2,
        "perpage": 2,
        "currentpage": 1,
        "nextpage": 1,
        "maxpage": 1,
        "pixels": [
            {
                "id": 1,
                "type": "gtmpixel",
                "name": "GTM Pixel",
                "tag": "GA-123456789",
                "date": "2020-11-10 18:00:00"
            },
            {
                "id": 2,
                "type": "twitterpixel",
                "name": "Twitter Pixel",
                "tag": "1234567",
                "date": "2020-11-10 18:10:00"
            }
        ]
    }
}

Create a Pixel

POST http://josefrancoapps.com/api/pixel/add

A pixel can be created using this endpoint. You need to send the pixel type and the tag.

Parâmetro Descrição
type (required) gtmpixel | gapixel | fbpixel | adwordspixel | linkedinpixel | twitterpixel | adrollpixel | quorapixel | pinterest | bing | snapchat | reddit | tiktok
name (required) Custom name for your pixel
tag (required) The tag for the pixel
curl --location --request POST 'http://josefrancoapps.com/api/pixel/add' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "type": "gtmpixel",
    "name": "My GTM",
    "tag": "GTM-ABCDE"
}'

Resposta do servidor

{
    "error": 0,
    "id": 1
}

Atualizar pixel

PUT http://josefrancoapps.com/api/pixel/:id/update

To update a pixel, you need to send a valid data in JSON via a PUT request. The data must be sent as the raw body of your request as shown below. The example below shows all the parameters you can send but you are not required to send all (See table for more info).

Parâmetro Descrição
name (optional) Custom name for your pixel
tag (required) The tag for the pixel
curl --location --request PUT 'http://josefrancoapps.com/api/pixel/:id/update' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "My GTM",
    "tag": "GTM-ABCDE"
}'

Resposta do servidor

{
    "error": 0,
    "message": "Pixel has been updated successfully."
}

Delete Pixel

DELETE http://josefrancoapps.com/api/pixel/:id/delete

To delete a pixel, you need to send a DELETE request.

curl --location --request DELETE 'http://josefrancoapps.com/api/pixel/:id/delete' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": 0,
    "message": "Pixel has been deleted successfully."
}

SEO & LLM Intelligence

API de utilizador para auditar e otimizar apenas ativos próprios, com entitlements do plano nativo, ownership obrigatório, IA nativa e localização sem par fixo de idiomas.

Estado do SEO & LLM

GET http://josefrancoapps.com/api/seo-llm/status

Devolve o estado do plugin, IA nativa, localização e funcionalidades SEO & LLM incluídas no plano atual. Capacidades globais de Admin não são expostas por esta API.

curl --location --request GET 'http://josefrancoapps.com/api/seo-llm/status' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": 0,
    "data": {
        "plugin": "tanshuku-seo-llm",
        "version": "0.5.1",
        "surface": "user",
        "entitlements": [],
        "capabilities": {
            "user_owned_assets_only": true,
            "plan_entitlements_native": true,
            "ownership_enforced": true,
            "admin_global_capabilities_exposed": false
        }
    }
}

Listar os meus ativos SEO & LLM

GET http://josefrancoapps.com/api/seo-llm/assets

Lista por família apenas os ativos pertencentes ao utilizador e cujas funcionalidades estão incluídas no plano nativo.

curl --location --request GET 'http://josefrancoapps.com/api/seo-llm/assets' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": 0,
    "data": {
        "families": [],
        "assets": []
    }
}
GET http://josefrancoapps.com/api/seo-llm/link/1

Exige SEO & LLM — Short Links no plano e ownership do link.

Parâmetro Descrição
id (obrigatório) ID do link
curl --location --request GET 'http://josefrancoapps.com/api/seo-llm/link/1' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": 0,
    "data": {
        "seo_score": 80,
        "llm_score": 45
    }
}
POST http://josefrancoapps.com/api/seo-llm/link/1/suggest

Exige Short Links + AI Suggestions no plano. Usa a IA nativa e o locale resolvido nativamente.

Parâmetro Descrição
id (obrigatório) ID do link
curl --location --request POST 'http://josefrancoapps.com/api/seo-llm/link/1/suggest' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": 0,
    "data": {
        "suggestion": []
    }
}
PUT http://josefrancoapps.com/api/seo-llm/link/1/apply

Atualiza apenas o registo nativo do link pertencente ao utilizador e cria snapshot.

Parâmetro Descrição
id (obrigatório) ID do link
meta_title (opcional) Título SEO
meta_description (opcional) Meta descrição
curl --location --request PUT 'http://josefrancoapps.com/api/seo-llm/link/1/apply' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \
--data-raw '{
    "meta_title": "SEO title",
    "meta_description": "SEO description"
}'

Resposta do servidor

{
    "error": 0,
    "message": "Os metadados SEO nativos do link foram atualizados."
}

Auditar um ativo próprio por família

GET http://josefrancoapps.com/api/seo-llm/asset/short_link/1

Famílias User: short_link, bio_page, qr_code, splash_page e gate_experience. O plano e o ownership são verificados antes da leitura.

Parâmetro Descrição
type (obrigatório) família User do ativo
id (obrigatório) ID nativo
curl --location --request GET 'http://josefrancoapps.com/api/seo-llm/asset/short_link/1' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": 0,
    "data": {
        "type": "short_link",
        "seo_score": 80,
        "llm_score": 60
    }
}

Gerar sugestão para um ativo próprio

POST http://josefrancoapps.com/api/seo-llm/asset/bio_page/1/suggest

Exige entitlement da família e AI Suggestions no plano nativo.

Parâmetro Descrição
type (obrigatório) família User do ativo
id (obrigatório) ID nativo
curl --location --request POST 'http://josefrancoapps.com/api/seo-llm/asset/bio_page/1/suggest' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": 0,
    "data": {
        "suggestion": []
    }
}

Analytics LLM por ativo próprio

GET http://josefrancoapps.com/api/seo-llm/asset/short_link/1/analytics

Exige AI Discovery Analytics no plano. Eventos históricos 0.4.0 são normalizados para a taxonomia 0.5.0 sem migração destrutiva.

Parâmetro Descrição
type (obrigatório) família User do ativo
id (obrigatório) ID nativo
curl --location --request GET 'http://josefrancoapps.com/api/seo-llm/asset/short_link/1/analytics' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": 0,
    "data": {
        "analytics": []
    }
}

Analytics de descoberta por IA

GET http://josefrancoapps.com/api/seo-llm/analytics

Devolve apenas eventos associados ao utilizador autenticado e exige a feature nativa de analytics.

curl --location --request GET 'http://josefrancoapps.com/api/seo-llm/analytics' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": 0,
    "data": {
        "llm_crawler": 0,
        "llm_fetcher": 0,
        "llm_referral": 0
    }
}

Sobreposições de CTA

List CTA Overlays

GET http://josefrancoapps.com/api/overlay?limit=2&page=1

To get cta overlays via the API, you can use this endpoint. You can also filter data (See table for more info).

Parâmetro Descrição
limit (opcional) Resultados de dados por página
page (opcional) Solicitação da página atual
curl --location --request GET 'http://josefrancoapps.com/api/overlay?limit=2&page=1' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": "0",
    "data": {
        "result": 2,
        "perpage": 2,
        "currentpage": 1,
        "nextpage": 1,
        "maxpage": 1,
        "cta": [
            {
                "id": 1,
                "type": "message",
                "name": "Product 1 Promo",
                "date": "2020-11-10 18:00:00"
            },
            {
                "id": 2,
                "type": "contact",
                "name": "Contact Page",
                "date": "2020-11-10 18:10:00"
            }
        ]
    }
}

Splash personalizado

List Custom Splash

GET http://josefrancoapps.com/api/splash?limit=2&page=1

To get Splash Pages via the API, you can use this endpoint. You can also filter data (See table for more info).

Parâmetro Descrição
limit (opcional) Resultados de dados por página
page (opcional) Solicitação da página atual
curl --location --request GET 'http://josefrancoapps.com/api/splash?limit=2&page=1' \
--header 'Authorization: Bearer YOURAPIKEY' \
--header 'Content-Type: application/json' \

Resposta do servidor

{
    "error": "0",
    "data": {
        "result": 2,
        "perpage": 2,
        "currentpage": 1,
        "nextpage": 1,
        "maxpage": 1,
        "splash": [
            {
                "id": 1,
                "name": "Product 1 Promo",
                "date": "2020-11-10 18:00:00"
            },
            {
                "id": 2,
                "name": "Product 2 Promo",
                "date": "2020-11-10 18:10:00"
            }
        ]
    }
}