
Com uma chave sandbox_, ou enquanto a API está em preparação, as compras são simuladas e nada é cobrado. Veja Sandbox e Produção.
O que a conta tem
GET /v1/extras devolve os certificados SSL, o SiteLock e outros produtos, a rádio com os seus adicionais, e o IP e o disco extra dos servidores. Pode filtrar com kind, por exemplo ?kind=ssl. A lista vem em páginas. Precisa de extras:read.
curl
curl "https://api.mozout.com/v1/extras" \
-H "Authorization: Bearer $RLX_API_KEY" \
-H "Accept-Language: pt"PHP
<?php
$ch = curl_init('https://api.mozout.com/v1/extras');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('RLX_API_KEY'),
'Accept-Language: pt',
],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status, PHP_EOL, $body, PHP_EOL;Python
import os
import requests
headers = {
"Authorization": "Bearer " + os.environ["RLX_API_KEY"],
"Accept-Language": "pt",
}
r = requests.get("https://api.mozout.com/v1/extras", headers=headers, timeout=30)
print(r.status_code)
print(r.text)JavaScript
const response = await fetch("https://api.mozout.com/v1/extras", {
headers: {
Authorization: `Bearer ${process.env.RLX_API_KEY}`,
"Accept-Language": "pt",
},
});
console.log(response.status);
console.log(await response.text());GET /v1/extras/{id} mostra um deles, com o id da lista. Os dados de acesso, como os da rádio, nunca vêm na API: vêem-se no portal, em manage_url.
O que está à venda
GET /v1/extras/catalog devolve os produtos, com os períodos e os preços na moeda da conta. purchasable diz se se pode comprar pela API. Se for false, use portal_url.
A compra
POST /v1/extras/purchase compra um produtos com purchasable a true. Hoje são três certificados SSL (RapidSSL, GeoTrust QuickSSL Premium e DigiCert Secure Site) e o SiteLock Find, Fix e Defend.
curl
curl -X POST "https://api.mozout.com/v1/extras/purchase" \
-H "Authorization: Bearer $RLX_API_KEY" \
-H "Accept-Language: pt" \
-H "Idempotency-Key: 9f1c2d3e-example" \
-H "Content-Type: application/json" \
-d '{"product_id": 96, "billing_cycle": "annually", "site": "example.com"}'PHP
<?php
$ch = curl_init('https://api.mozout.com/v1/extras/purchase');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => '{"product_id": 96, "billing_cycle": "annually", "site": "example.com"}',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('RLX_API_KEY'),
'Accept-Language: pt',
'Idempotency-Key: 9f1c2d3e-example',
'Content-Type: application/json',
],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status, PHP_EOL, $body, PHP_EOL;Python
import os
import requests
headers = {
"Authorization": "Bearer " + os.environ["RLX_API_KEY"],
"Accept-Language": "pt",
"Idempotency-Key": "9f1c2d3e-example",
}
payload = {"product_id": 96, "billing_cycle": "annually", "site": "example.com"}
r = requests.post("https://api.mozout.com/v1/extras/purchase", headers=headers, json=payload, timeout=30)
print(r.status_code)
print(r.text)JavaScript
const response = await fetch("https://api.mozout.com/v1/extras/purchase", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.RLX_API_KEY}`,
"Accept-Language": "pt",
"Idempotency-Key": "9f1c2d3e-example",
"Content-Type": "application/json",
},
body: JSON.stringify({"product_id": 96, "billing_cycle": "annually", "site": "example.com"}),
});
console.log(response.status);
console.log(await response.text());A compra precisa das permissões billing:purchase e extras:write, e do cabeçalho Idempotency-Key. Paga-se só com o saldo da conta, dentro do limite de gastos da chave. Se faltar saldo, o preço mudar ou o perfil da conta estiver por completar, nada é cobrado.
- SiteLock: indique
site, o domínio do site. Só tem os períodos que aparecem no catálogo: nunca 3 nem 6 meses. - Certificados: não levam
site. O certificado configura-se no portal depois da compra, emmanage_url, e o estado vem emcertificate.
A resposta é 202. A acção acaba com o pagamento; a entrega acompanha-se em GET /v1/extras/{id}, com o extra_id da resposta.
O que se trata no portal
- IP e disco extra de um servidor: vêem-se na lista, mas compram-se na página do servidor, no portal.
- Rádio e os outros produtos do catálogo: a compra pede escolhas ou passos que só existem no portal. A resposta é
422comportal_onlyeportal_url.
Operações
4 operações nesta área. Clique numa operação para ver os parâmetros, os exemplos e as respostas, ou para a experimentar no Playground, sem sair da página.
GETListar os extras à venda
/v1/extras/catalog
https://api.mozout.com/v1/extras/catalogPrecisa de extras:read. Preços na moeda da conta. purchasable diz se se pode comprar pela API; se não, use portal_url. O SiteLock não tem períodos de 3 nem de 6 meses. O IP e o disco extra de um servidor compram-se no portal da conta.
Autenticação
Precisa de uma chave válida no cabeçalho Authorization: Bearer. Permissão necessária: extras:read.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
kind | consulta | string: ssl, sitelock, website_builder, backup, email_filter, email, seo, monitoring, vpn, social, radio, radio_addon, vps_ip, vps_disk, other | não | Só este tipo. |
page | consulta | integer | não | O número da página. A primeira é a 1. |
per_page | consulta | integer | não | Resultados por página, de 1 a 100. Por omissão, 10. |
X-API-Mode | cabeçalho | string: sandbox, production | não | Opcional. Se não coincidir com o modo da chave, o pedido é recusado com invalid_request e a razão mode_mismatch. Serve para garantir que um programa nunca corre com a chave errada. |
Exemplos
curl
curl "https://api.mozout.com/v1/extras/catalog" \
-H "Authorization: Bearer $RLX_API_KEY" \
-H "Accept-Language: pt"PHP
<?php
$ch = curl_init('https://api.mozout.com/v1/extras/catalog');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('RLX_API_KEY'),
'Accept-Language: pt',
],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status, PHP_EOL, $body, PHP_EOL;Python
import os
import requests
headers = {
"Authorization": "Bearer " + os.environ["RLX_API_KEY"],
"Accept-Language": "pt",
}
r = requests.get("https://api.mozout.com/v1/extras/catalog", headers=headers, timeout=30)
print(r.status_code)
print(r.text)JavaScript
const response = await fetch("https://api.mozout.com/v1/extras/catalog", {
headers: {
Authorization: `Bearer ${process.env.RLX_API_KEY}`,
"Accept-Language": "pt",
},
});
console.log(response.status);
console.log(await response.text());Respostas
200
Listar os extras à venda.
{
"data": [
{
"id": 96,
"kind": "sitelock",
"name": "Fix",
"description": "Finds and removes malware from the site.",
"currency": "USD",
"billing_cycles": [
{
"billing_cycle": "annually",
"months": 12,
"price": 5999.4,
"setup_fee": 0.0
}
],
"purchasable": true,
"requires_site": true,
"portal_url": "https://my.example.com/onestep/billingcycle?pid=96&language=portuguese¤cy=5"
}
],
"meta": {
"page": 1,
"per_page": 10,
"total": 1,
"total_pages": 1
}
}| Cabeçalho | Descrição |
|---|---|
X-Correlation-ID | Identificador deste pedido. Indique-o ao suporte se comunicar um problema. |
X-RateLimit-Limit | Pedidos permitidos por minuto. |
X-RateLimit-Remaining | Pedidos que restam no minuto actual. |
X-RateLimit-Reset | Quando acaba o minuto, em segundos Unix. |
X-API-Mode | O modo da chave que fez o pedido: sandbox ou production. |
401
A chave está em falta, não é válida, foi revogada ou passou da validade, ou quem a criou já não tem acesso à conta.
{
"error": {
"code": "unauthorized",
"message": "Chave da API em falta ou inválida.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {}
}
}403
A conta não pode usar a API (forbidden), a chave não tem a permissão necessária (insufficient_scope), ou o endereço IP não está na lista da chave (ip_not_allowed).
{
"error": {
"code": "insufficient_scope",
"message": "Esta chave não tem a permissão necessária.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {
"required": "dns:read"
}
}
}422
Alguns dados não são válidos.
{
"error": {
"code": "validation_failed",
"message": "Alguns dados não são válidos.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {}
}
}429
Demasiados pedidos. Espere o tempo indicado em Retry-After.
{
"error": {
"code": "rate_limited",
"message": "Demasiados pedidos. Tente de novo daqui a pouco.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {
"retry_after": 42
}
}
}| Cabeçalho | Descrição |
|---|---|
Retry-After | Segundos a esperar antes de tentar de novo. |
500
Ocorreu um erro interno. Indique o correlation_id ao suporte.
{
"error": {
"code": "internal_error",
"message": "Ocorreu um erro interno. Indique o correlation_id ao suporte.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {}
}
}503
A API está desligada.
{
"error": {
"code": "disabled",
"message": "A API está desligada de momento.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {}
}
}Erros
| Estado | Código | Significado |
|---|---|---|
| 401 | unauthorized | A chave está em falta, não é válida, foi revogada ou passou da validade, ou quem a criou já não tem acesso à conta. |
| 403 | forbidden, insufficient_scope, ip_not_allowed | A conta não pode usar a API (forbidden), a chave não tem a permissão necessária (insufficient_scope), ou o endereço IP não está na lista da chave (ip_not_allowed). |
| 422 | validation_failed | Alguns dados não são válidos. |
| 429 | rate_limited | Demasiados pedidos. Espere o tempo indicado em Retry-After. |
| 500 | internal_error | Ocorreu um erro interno. Indique o correlation_id ao suporte. |
| 503 | disabled | A API está desligada. |
O formato dos erros está explicado em Erros.
GETListar os extras da conta
/v1/extras
https://api.mozout.com/v1/extrasPrecisa de extras:read. Os extras desta conta. O id começa por s num serviço, por a num adicional e por v num IP ou disco extra de um servidor, que traz também quantity e invoice_id. Os certificados trazem certificate. Os dados de acesso nunca vêm aqui.
Autenticação
Precisa de uma chave válida no cabeçalho Authorization: Bearer. Permissão necessária: extras:read.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
kind | consulta | string: ssl, sitelock, website_builder, backup, email_filter, email, seo, monitoring, vpn, social, radio, radio_addon, vps_ip, vps_disk, other | não | Só este tipo. |
page | consulta | integer | não | O número da página. A primeira é a 1. |
per_page | consulta | integer | não | Resultados por página, de 1 a 100. Por omissão, 10. |
X-API-Mode | cabeçalho | string: sandbox, production | não | Opcional. Se não coincidir com o modo da chave, o pedido é recusado com invalid_request e a razão mode_mismatch. Serve para garantir que um programa nunca corre com a chave errada. |
Exemplos
curl
curl "https://api.mozout.com/v1/extras" \
-H "Authorization: Bearer $RLX_API_KEY" \
-H "Accept-Language: pt"PHP
<?php
$ch = curl_init('https://api.mozout.com/v1/extras');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('RLX_API_KEY'),
'Accept-Language: pt',
],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status, PHP_EOL, $body, PHP_EOL;Python
import os
import requests
headers = {
"Authorization": "Bearer " + os.environ["RLX_API_KEY"],
"Accept-Language": "pt",
}
r = requests.get("https://api.mozout.com/v1/extras", headers=headers, timeout=30)
print(r.status_code)
print(r.text)JavaScript
const response = await fetch("https://api.mozout.com/v1/extras", {
headers: {
Authorization: `Bearer ${process.env.RLX_API_KEY}`,
"Accept-Language": "pt",
},
});
console.log(response.status);
console.log(await response.text());Respostas
200
Listar os extras da conta.
{
"data": [
{
"id": "s812",
"kind": "ssl",
"name": "RapidSSL",
"status": "active",
"site": null,
"parent_service_id": null,
"billing_cycle": "annually",
"amount": 1077.0,
"currency": "USD",
"next_due_date": "2027-11-05",
"registered_at": "2026-11-05",
"manage_url": "https://my.example.com/clientarea.php?action=productdetails&id=812&language=portuguese¤cy=5",
"certificate": {
"status": "awaiting_configuration",
"expires_at": null
}
}
],
"meta": {
"page": 1,
"per_page": 10,
"total": 1,
"total_pages": 1
}
}| Cabeçalho | Descrição |
|---|---|
X-Correlation-ID | Identificador deste pedido. Indique-o ao suporte se comunicar um problema. |
X-RateLimit-Limit | Pedidos permitidos por minuto. |
X-RateLimit-Remaining | Pedidos que restam no minuto actual. |
X-RateLimit-Reset | Quando acaba o minuto, em segundos Unix. |
X-API-Mode | O modo da chave que fez o pedido: sandbox ou production. |
401
A chave está em falta, não é válida, foi revogada ou passou da validade, ou quem a criou já não tem acesso à conta.
{
"error": {
"code": "unauthorized",
"message": "Chave da API em falta ou inválida.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {}
}
}403
A conta não pode usar a API (forbidden), a chave não tem a permissão necessária (insufficient_scope), ou o endereço IP não está na lista da chave (ip_not_allowed).
{
"error": {
"code": "insufficient_scope",
"message": "Esta chave não tem a permissão necessária.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {
"required": "dns:read"
}
}
}422
Alguns dados não são válidos.
{
"error": {
"code": "validation_failed",
"message": "Alguns dados não são válidos.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {}
}
}429
Demasiados pedidos. Espere o tempo indicado em Retry-After.
{
"error": {
"code": "rate_limited",
"message": "Demasiados pedidos. Tente de novo daqui a pouco.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {
"retry_after": 42
}
}
}| Cabeçalho | Descrição |
|---|---|
Retry-After | Segundos a esperar antes de tentar de novo. |
500
Ocorreu um erro interno. Indique o correlation_id ao suporte.
{
"error": {
"code": "internal_error",
"message": "Ocorreu um erro interno. Indique o correlation_id ao suporte.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {}
}
}503
A API está desligada.
{
"error": {
"code": "disabled",
"message": "A API está desligada de momento.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {}
}
}Erros
| Estado | Código | Significado |
|---|---|---|
| 401 | unauthorized | A chave está em falta, não é válida, foi revogada ou passou da validade, ou quem a criou já não tem acesso à conta. |
| 403 | forbidden, insufficient_scope, ip_not_allowed | A conta não pode usar a API (forbidden), a chave não tem a permissão necessária (insufficient_scope), ou o endereço IP não está na lista da chave (ip_not_allowed). |
| 422 | validation_failed | Alguns dados não são válidos. |
| 429 | rate_limited | Demasiados pedidos. Espere o tempo indicado em Retry-After. |
| 500 | internal_error | Ocorreu um erro interno. Indique o correlation_id ao suporte. |
| 503 | disabled | A API está desligada. |
O formato dos erros está explicado em Erros.
GETVer um extra
/v1/extras/{id}
https://api.mozout.com/v1/extras/{id}Precisa de extras:read. Um extra desta conta, com o id da lista.
Autenticação
Precisa de uma chave válida no cabeçalho Authorization: Bearer. Permissão necessária: extras:read.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
id | caminho | string | sim | O id da lista, como s812. |
X-API-Mode | cabeçalho | string: sandbox, production | não | Opcional. Se não coincidir com o modo da chave, o pedido é recusado com invalid_request e a razão mode_mismatch. Serve para garantir que um programa nunca corre com a chave errada. |
Exemplos
curl
curl "https://api.mozout.com/v1/extras/00000000-0000-4000-8000-000000000000" \
-H "Authorization: Bearer $RLX_API_KEY" \
-H "Accept-Language: pt"PHP
<?php
$ch = curl_init('https://api.mozout.com/v1/extras/00000000-0000-4000-8000-000000000000');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('RLX_API_KEY'),
'Accept-Language: pt',
],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status, PHP_EOL, $body, PHP_EOL;Python
import os
import requests
headers = {
"Authorization": "Bearer " + os.environ["RLX_API_KEY"],
"Accept-Language": "pt",
}
r = requests.get("https://api.mozout.com/v1/extras/00000000-0000-4000-8000-000000000000", headers=headers, timeout=30)
print(r.status_code)
print(r.text)JavaScript
const response = await fetch("https://api.mozout.com/v1/extras/00000000-0000-4000-8000-000000000000", {
headers: {
Authorization: `Bearer ${process.env.RLX_API_KEY}`,
"Accept-Language": "pt",
},
});
console.log(response.status);
console.log(await response.text());Respostas
200
Ver um extra.
{
"data": {
"id": "s812",
"kind": "ssl",
"name": "RapidSSL",
"status": "active",
"site": null,
"parent_service_id": null,
"billing_cycle": "annually",
"amount": 1077.0,
"currency": "USD",
"next_due_date": "2027-11-05",
"registered_at": "2026-11-05",
"manage_url": "https://my.example.com/clientarea.php?action=productdetails&id=812&language=portuguese¤cy=5",
"certificate": {
"status": "awaiting_configuration",
"expires_at": null
}
},
"meta": {}
}| Cabeçalho | Descrição |
|---|---|
X-Correlation-ID | Identificador deste pedido. Indique-o ao suporte se comunicar um problema. |
X-RateLimit-Limit | Pedidos permitidos por minuto. |
X-RateLimit-Remaining | Pedidos que restam no minuto actual. |
X-RateLimit-Reset | Quando acaba o minuto, em segundos Unix. |
X-API-Mode | O modo da chave que fez o pedido: sandbox ou production. |
401
A chave está em falta, não é válida, foi revogada ou passou da validade, ou quem a criou já não tem acesso à conta.
{
"error": {
"code": "unauthorized",
"message": "Chave da API em falta ou inválida.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {}
}
}403
A conta não pode usar a API (forbidden), a chave não tem a permissão necessária (insufficient_scope), ou o endereço IP não está na lista da chave (ip_not_allowed).
{
"error": {
"code": "insufficient_scope",
"message": "Esta chave não tem a permissão necessária.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {
"required": "dns:read"
}
}
}404
Não encontrado.
{
"error": {
"code": "not_found",
"message": "Não encontrado.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {}
}
}429
Demasiados pedidos. Espere o tempo indicado em Retry-After.
{
"error": {
"code": "rate_limited",
"message": "Demasiados pedidos. Tente de novo daqui a pouco.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {
"retry_after": 42
}
}
}| Cabeçalho | Descrição |
|---|---|
Retry-After | Segundos a esperar antes de tentar de novo. |
500
Ocorreu um erro interno. Indique o correlation_id ao suporte.
{
"error": {
"code": "internal_error",
"message": "Ocorreu um erro interno. Indique o correlation_id ao suporte.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {}
}
}503
A API está desligada.
{
"error": {
"code": "disabled",
"message": "A API está desligada de momento.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {}
}
}Erros
| Estado | Código | Significado |
|---|---|---|
| 401 | unauthorized | A chave está em falta, não é válida, foi revogada ou passou da validade, ou quem a criou já não tem acesso à conta. |
| 403 | forbidden, insufficient_scope, ip_not_allowed | A conta não pode usar a API (forbidden), a chave não tem a permissão necessária (insufficient_scope), ou o endereço IP não está na lista da chave (ip_not_allowed). |
| 404 | not_found | Não encontrado. |
| 429 | rate_limited | Demasiados pedidos. Espere o tempo indicado em Retry-After. |
| 500 | internal_error | Ocorreu um erro interno. Indique o correlation_id ao suporte. |
| 503 | disabled | A API está desligada. |
O formato dos erros está explicado em Erros.
POSTComprar um extra
/v1/extras/purchase
https://api.mozout.com/v1/extras/purchasePrecisa de billing:purchase. Precisa também de extras:write e do cabeçalho Idempotency-Key. Paga-se só com saldo, dentro do limite de gastos da chave. Só para produtos com purchasable a true. O SiteLock precisa de site; um certificado não o leva e configura-se no portal depois da compra. Responde 202: a acção acaba com o pagamento, e a entrega acompanha-se em GET /v1/extras/{id}. Limite de 5 por minuto.
Autenticação
Precisa de uma chave válida no cabeçalho Authorization: Bearer. Permissão necessária: billing:purchase.
Parâmetros
| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
Idempotency-Key | cabeçalho | string | não | Um valor único qualquer, até 255 caracteres visíveis. Vale 24 horas por chave. Repetir o mesmo pedido devolve a resposta guardada; outro corpo, ou um primeiro pedido ainda em curso, devolve 409. |
X-API-Mode | cabeçalho | string: sandbox, production | não | Opcional. Se não coincidir com o modo da chave, o pedido é recusado com invalid_request e a razão mode_mismatch. Serve para garantir que um programa nunca corre com a chave errada. |
Corpo do pedido
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
product_id | integer | sim | O id do catálogo. |
billing_cycle | string: monthly, annually, biennially, triennially | sim | |
site | string | não | O domínio do site. Só para o SiteLock. |
Exemplos
curl
curl -X POST "https://api.mozout.com/v1/extras/purchase" \
-H "Authorization: Bearer $RLX_API_KEY" \
-H "Accept-Language: pt" \
-H "Idempotency-Key: 9f1c2d3e-example" \
-H "Content-Type: application/json" \
-d '{"product_id": 96, "billing_cycle": "annually", "site": "example.com"}'PHP
<?php
$ch = curl_init('https://api.mozout.com/v1/extras/purchase');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => '{"product_id": 96, "billing_cycle": "annually", "site": "example.com"}',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('RLX_API_KEY'),
'Accept-Language: pt',
'Idempotency-Key: 9f1c2d3e-example',
'Content-Type: application/json',
],
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $status, PHP_EOL, $body, PHP_EOL;Python
import os
import requests
headers = {
"Authorization": "Bearer " + os.environ["RLX_API_KEY"],
"Accept-Language": "pt",
"Idempotency-Key": "9f1c2d3e-example",
}
payload = {"product_id": 96, "billing_cycle": "annually", "site": "example.com"}
r = requests.post("https://api.mozout.com/v1/extras/purchase", headers=headers, json=payload, timeout=30)
print(r.status_code)
print(r.text)JavaScript
const response = await fetch("https://api.mozout.com/v1/extras/purchase", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.RLX_API_KEY}`,
"Accept-Language": "pt",
"Idempotency-Key": "9f1c2d3e-example",
"Content-Type": "application/json",
},
body: JSON.stringify({"product_id": 96, "billing_cycle": "annually", "site": "example.com"}),
});
console.log(response.status);
console.log(await response.text());Respostas
202
Comprar um extra.
{
"data": {
"action_id": "6f1d2c3a-8b4e-4f7a-9c21-1d2e3f4a5b6c",
"status": "simulated",
"simulated": true,
"product_id": 96,
"name": "Fix",
"billing_cycle": "annually",
"site": "example.com",
"amount": 5999.4,
"currency": "USD",
"credit_sufficient": true,
"within_spending_limit": true
},
"meta": {}
}| Cabeçalho | Descrição |
|---|---|
X-Correlation-ID | Identificador deste pedido. Indique-o ao suporte se comunicar um problema. |
X-RateLimit-Limit | Pedidos permitidos por minuto. |
X-RateLimit-Remaining | Pedidos que restam no minuto actual. |
X-RateLimit-Reset | Quando acaba o minuto, em segundos Unix. |
X-API-Mode | O modo da chave que fez o pedido: sandbox ou production. |
400
O pedido não é válido, por exemplo o corpo não é JSON ou a ligação não é HTTPS.
{
"error": {
"code": "invalid_request",
"message": "O pedido não é válido.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {}
}
}401
A chave está em falta, não é válida, foi revogada ou passou da validade, ou quem a criou já não tem acesso à conta.
{
"error": {
"code": "unauthorized",
"message": "Chave da API em falta ou inválida.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {}
}
}402
Saldo insuficiente. Nada foi cobrado.
{
"error": {
"code": "insufficient_credit",
"message": "The account does not have enough credit. Nothing was charged.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {
"amount": 1900.0,
"currency": "USD"
}
}
}403
A conta não pode usar a API (forbidden), a chave não tem a permissão necessária (insufficient_scope), ou o endereço IP não está na lista da chave (ip_not_allowed).
{
"error": {
"code": "insufficient_scope",
"message": "Esta chave não tem a permissão necessária.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {
"required": "dns:read"
}
}
}409
A operação não se pode fazer no estado actual. Veja details.reason.
{
"error": {
"code": "conflict",
"message": "This operation only works on an active domain.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {
"reason": "domain_not_active"
}
}
}422
Alguns dados não são válidos.
{
"error": {
"code": "validation_failed",
"message": "Alguns dados não são válidos.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {}
}
}429
Demasiados pedidos. Espere o tempo indicado em Retry-After.
{
"error": {
"code": "rate_limited",
"message": "Demasiados pedidos. Tente de novo daqui a pouco.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {
"retry_after": 42
}
}
}| Cabeçalho | Descrição |
|---|---|
Retry-After | Segundos a esperar antes de tentar de novo. |
500
Ocorreu um erro interno. Indique o correlation_id ao suporte.
{
"error": {
"code": "internal_error",
"message": "Ocorreu um erro interno. Indique o correlation_id ao suporte.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {}
}
}502
O serviço por trás da API não respondeu como esperado.
{
"error": {
"code": "upstream_error",
"message": "The service did not respond as expected. Please try again later.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {}
}
}503
A API está desligada.
{
"error": {
"code": "disabled",
"message": "A API está desligada de momento.",
"correlation_id": "0f8fad5b-d9cb-469f-a165-70867728950e",
"details": {}
}
}Erros
| Estado | Código | Significado |
|---|---|---|
| 400 | invalid_request | O pedido não é válido, por exemplo o corpo não é JSON ou a ligação não é HTTPS. |
| 401 | unauthorized | A chave está em falta, não é válida, foi revogada ou passou da validade, ou quem a criou já não tem acesso à conta. |
| 402 | insufficient_credit | Saldo insuficiente. Nada foi cobrado. |
| 403 | forbidden, insufficient_scope, ip_not_allowed | A conta não pode usar a API (forbidden), a chave não tem a permissão necessária (insufficient_scope), ou o endereço IP não está na lista da chave (ip_not_allowed). |
| 409 | conflict | A operação não se pode fazer no estado actual. Veja details.reason. |
| 422 | validation_failed | Alguns dados não são válidos. |
| 429 | rate_limited | Demasiados pedidos. Espere o tempo indicado em Retry-After. |
| 500 | internal_error | Ocorreu um erro interno. Indique o correlation_id ao suporte. |
| 502 | upstream_error | O serviço por trás da API não respondeu como esperado. |
| 503 | disabled | A API está desligada. |
O formato dos erros está explicado em Erros.
Nenhuma operação encontrada.