Endpoints de domínios, templates e publicação
API · v1 · Produção · Revisado em · Markdown
Estas 45 operações estão em homologação em https://api.staging.agilink.io/v1. Exemplos usam recursos fictícios. A referência interativa contém os schemas completos de cada campo, inclusive objetos internos. Leia também o guia da integração e a migração de tokens.
Todas as requisições usam Authorization: Bearer <credencial>. Sessão humana e chave limitada são indicadas por operação. OAuth depende da Tarefa 2. Mutações exigem Idempotency-Key UUID v4; revisões, quando exigidas, usam If-Match: "<revision>". Nunca envie credenciais em query strings.
GET /domains
Seção intitulada “GET /domains”Listar domínios autorizados e estados.
Permissão: domains:read. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
appId |
query | sim | AppId |
limit |
query | não | integer |
cursor |
query | não | Cursor |
detached |
query | não | — |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request GET 'https://api.staging.agilink.io/v1/domains?appId=app_loja' \ --header 'Authorization: Bearer <credencial>'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
{ "data": [ { "id": "domain_loja", "appId": "app_loja", "hostname": "go.example.com", "mode": "external", "ownership": "unverified", "dns": "pending", "https": "pending", "links": "pending", "detached": false, "removalState": null, "canManageDns": false, "zoneName": "example.com", "nameservers": [], "challenge": null, "connectionRecords": [], "nativeConfig": {}, "revision": "20000000-0000-4000-8000-000000000001", "createdAt": "2026-10-19T20:00:00Z", "updatedAt": "2026-10-19T20:00:00Z", "publication": { "status": "pending", "desiredRevision": "20000000-0000-4000-8000-000000000001", "confirmedRevision": null, "updatedAt": "2026-10-19T20:00:00Z" }, "lastCheckedAt": null, "lastError": null } ], "pagination": { "hasMore": false, "nextCursor": null }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 422, 429, 500, 503. Veja códigos e repetição.
POST /domains
Seção intitulada “POST /domains”Solicitar domínio de plataforma ou conectar domínio próprio.
Permissão: domains:create. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
Idempotency-Key |
header | sim | UUID v4 por intenção. Recibo por 24h. Mudança de payload/precondição retorna 409. Segredo de chave não é reexibido. |
Corpo: application/json. Campos desconhecidos são rejeitados.
| Campo | Tipo | Obrigatório | Restrição |
|---|---|---|---|
appId |
AppId | sim | Consulte o schema para restrições e campos internos |
mode |
— | sim | Valores: platform, managed, external |
prefix |
string | não | Máximo 32 caracteres |
hostname |
Domain | não | Consulte o schema para restrições e campos internos |
apexProfileId |
string | não | Máximo 100 caracteres |
{ "appId": "app_loja", "mode": "platform", "prefix": "minhaloja"}Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request POST 'https://api.staging.agilink.io/v1/domains' \ --header 'Authorization: Bearer <credencial>' \ --header 'Idempotency-Key: 10000000-0000-4000-8000-000000000001' \ --header 'Content-Type: application/json' \ --data '{"appId":"app_loja","mode":"platform","prefix":"minhaloja"}'Resposta: 202. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
Location |
Operação a acompanhar. | /v1/operations/op_example |
Retry-After |
Segundos até a próxima consulta. | 1 |
{ "data": { "id": "op_example", "appId": "app_loja", "type": "link.resync", "status": "queued", "createdAt": "2026-10-19T20:00:00Z", "updatedAt": "2026-10-19T20:00:00Z", "revision": "20000000-0000-4000-8000-000000000001", "result": null, "error": null }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 409, 413, 415, 422, 429, 500, 503. Veja códigos e repetição.
GET /domains/{domainId}
Seção intitulada “GET /domains/{domainId}”Detalhe, instruções e pendências.
Permissão: domains:read. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
domainId |
path | sim | OpaqueId |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request GET 'https://api.staging.agilink.io/v1/domains/domain_example' \ --header 'Authorization: Bearer <credencial>'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "id": "domain_loja", "appId": "app_loja", "hostname": "go.example.com", "mode": "external", "ownership": "unverified", "dns": "pending", "https": "pending", "links": "pending", "detached": false, "removalState": null, "canManageDns": false, "zoneName": "example.com", "nameservers": [], "challenge": null, "connectionRecords": [], "nativeConfig": {}, "revision": "20000000-0000-4000-8000-000000000001", "createdAt": "2026-10-19T20:00:00Z", "updatedAt": "2026-10-19T20:00:00Z", "publication": { "status": "pending", "desiredRevision": "20000000-0000-4000-8000-000000000001", "confirmedRevision": null, "updatedAt": "2026-10-19T20:00:00Z" }, "lastCheckedAt": null, "lastError": null }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 422, 429, 500, 503. Veja códigos e repetição.
DELETE /domains/{domainId}
Seção intitulada “DELETE /domains/{domainId}”Desvincular com dependências e operação recuperável.
Permissão: domains:delete. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
domainId |
path | sim | OpaqueId |
Idempotency-Key |
header | sim | UUID v4 por intenção. Recibo por 24h. Mudança de payload/precondição retorna 409. Segredo de chave não é reexibido. |
If-Match |
header | sim | ETag forte obtido em consulta. Ausência 428; revisão antiga 412. |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request DELETE 'https://api.staging.agilink.io/v1/domains/domain_example' \ --header 'Authorization: Bearer <credencial>' \ --header 'Idempotency-Key: 10000000-0000-4000-8000-000000000001' \ --header 'If-Match: "20000000-0000-4000-8000-000000000001"'Resposta: 202. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
Location |
Operação a acompanhar. | /v1/operations/op_example |
Retry-After |
Segundos até a próxima consulta. | 1 |
{ "data": { "id": "op_example", "appId": "app_loja", "type": "link.resync", "status": "queued", "createdAt": "2026-10-19T20:00:00Z", "updatedAt": "2026-10-19T20:00:00Z", "revision": "20000000-0000-4000-8000-000000000001", "result": null, "error": null }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 409, 412, 413, 422, 428, 429, 500, 503. Veja códigos e repetição.
GET /domains/{domainId}/capabilities
Seção intitulada “GET /domains/{domainId}/capabilities”Ações possíveis para aquele modo e usuário.
Permissão: capabilities:read. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
domainId |
path | sim | OpaqueId |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request GET 'https://api.staging.agilink.io/v1/domains/domain_example/capabilities' \ --header 'Authorization: Bearer <credencial>'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "domainId": "domain_loja", "appId": "app_loja", "revision": "20000000-0000-4000-8000-000000000001", "mode": "external", "actions": { "verify": true, "detach": true, "dns": false, "nativeConfig": false, "webConfig": false, "recovery": false, "templates": true }, "reasons": { "dns": "DNS externo permanece no seu provedor." } }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 422, 429, 500, 503. Veja códigos e repetição.
POST /domains/{domainId}/verify
Seção intitulada “POST /domains/{domainId}/verify”Verificar propriedade, DNS, TLS e prontidão.
Permissão: domains:verify. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
domainId |
path | sim | OpaqueId |
Idempotency-Key |
header | sim | UUID v4 por intenção. Recibo por 24h. Mudança de payload/precondição retorna 409. Segredo de chave não é reexibido. |
If-Match |
header | sim | ETag forte obtido em consulta. Ausência 428; revisão antiga 412. |
Corpo: application/json. Campos desconhecidos são rejeitados.
| Campo | Tipo | Obrigatório | Restrição |
|---|
{}Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request POST 'https://api.staging.agilink.io/v1/domains/domain_example/verify' \ --header 'Authorization: Bearer <credencial>' \ --header 'Idempotency-Key: 10000000-0000-4000-8000-000000000001' \ --header 'If-Match: "20000000-0000-4000-8000-000000000001"' \ --header 'Content-Type: application/json' \ --data '{}'Resposta: 202. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
Location |
Operação a acompanhar. | /v1/operations/op_example |
Retry-After |
Segundos até a próxima consulta. | 1 |
{ "data": { "id": "op_example", "appId": "app_loja", "type": "link.resync", "status": "queued", "createdAt": "2026-10-19T20:00:00Z", "updatedAt": "2026-10-19T20:00:00Z", "revision": "20000000-0000-4000-8000-000000000001", "result": null, "error": null }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 409, 412, 413, 415, 422, 428, 429, 500, 503. Veja códigos e repetição.
GET /domains/{domainId}/native-config
Seção intitulada “GET /domains/{domainId}/native-config”Configuração Android, iOS, scheme e rotas.
Permissão: native_config:read. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
domainId |
path | sim | OpaqueId |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request GET 'https://api.staging.agilink.io/v1/domains/domain_example/native-config' \ --header 'Authorization: Bearer <credencial>'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "domainId": "domain_loja", "appId": "app_loja", "revision": "20000000-0000-4000-8000-000000000001", "config": {}, "publication": { "status": "pending", "desiredRevision": "20000000-0000-4000-8000-000000000001", "confirmedRevision": null, "updatedAt": "2026-10-19T20:00:00Z" } }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 422, 429, 500, 503. Veja códigos e repetição.
PUT /domains/{domainId}/native-config
Seção intitulada “PUT /domains/{domainId}/native-config”Configuração Android, iOS, scheme e rotas.
Permissão: native_config:update. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
domainId |
path | sim | OpaqueId |
Idempotency-Key |
header | sim | UUID v4 por intenção. Recibo por 24h. Mudança de payload/precondição retorna 409. Segredo de chave não é reexibido. |
If-Match |
header | sim | ETag forte obtido em consulta. Ausência 428; revisão antiga 412. |
Corpo: application/json. Campos desconhecidos são rejeitados.
| Campo | Tipo | Obrigatório | Restrição |
|---|---|---|---|
androidPackage |
string | não | Máximo 255 caracteres |
fingerprints |
array | não | Consulte o schema para restrições e campos internos |
ios |
object / null | não | Consulte o schema para restrições e campos internos |
routing |
object / null | não | Consulte o schema para restrições e campos internos |
{ "androidPackage": "com.example.loja", "fingerprints": [ "AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA" ]}Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request PUT 'https://api.staging.agilink.io/v1/domains/domain_example/native-config' \ --header 'Authorization: Bearer <credencial>' \ --header 'Idempotency-Key: 10000000-0000-4000-8000-000000000001' \ --header 'If-Match: "20000000-0000-4000-8000-000000000001"' \ --header 'Content-Type: application/json' \ --data '{"androidPackage":"com.example.loja","fingerprints":["AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA"]}'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "domainId": "domain_loja", "appId": "app_loja", "revision": "20000000-0000-4000-8000-000000000001", "config": {}, "publication": { "status": "pending", "desiredRevision": "20000000-0000-4000-8000-000000000001", "confirmedRevision": null, "updatedAt": "2026-10-19T20:00:00Z" } }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 409, 412, 413, 415, 422, 428, 429, 500, 503. Veja códigos e repetição.
GET /domains/{domainId}/web-config
Seção intitulada “GET /domains/{domainId}/web-config”Destino web, metadados e prefixo.
Permissão: web_config:read. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
domainId |
path | sim | OpaqueId |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request GET 'https://api.staging.agilink.io/v1/domains/domain_example/web-config' \ --header 'Authorization: Bearer <credencial>'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "domainId": "domain_loja", "appId": "app_loja", "revision": "20000000-0000-4000-8000-000000000001", "config": {}, "publication": { "status": "pending", "desiredRevision": "20000000-0000-4000-8000-000000000001", "confirmedRevision": null, "updatedAt": "2026-10-19T20:00:00Z" } }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 422, 429, 500, 503. Veja códigos e repetição.
PUT /domains/{domainId}/web-config
Seção intitulada “PUT /domains/{domainId}/web-config”Destino web, metadados e prefixo.
Permissão: web_config:update. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
domainId |
path | sim | OpaqueId |
Idempotency-Key |
header | sim | UUID v4 por intenção. Recibo por 24h. Mudança de payload/precondição retorna 409. Segredo de chave não é reexibido. |
If-Match |
header | sim | ETag forte obtido em consulta. Ausência 428; revisão antiga 412. |
Corpo: application/json. Campos desconhecidos são rejeitados.
| Campo | Tipo | Obrigatório | Restrição |
|---|---|---|---|
flutterUrl |
string | não | Máximo 4096 caracteres |
flutterName |
string | não | Máximo 100 caracteres |
flutterDescription |
string | não | Máximo 300 caracteres |
flutterRoutePrefix |
string | não | Máximo 200 caracteres |
{ "flutterUrl": "https://shop.example.com", "flutterRoutePrefix": "/produtos/", "flutterName": "Loja"}Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request PUT 'https://api.staging.agilink.io/v1/domains/domain_example/web-config' \ --header 'Authorization: Bearer <credencial>' \ --header 'Idempotency-Key: 10000000-0000-4000-8000-000000000001' \ --header 'If-Match: "20000000-0000-4000-8000-000000000001"' \ --header 'Content-Type: application/json' \ --data '{"flutterUrl":"https://shop.example.com","flutterRoutePrefix":"/produtos/","flutterName":"Loja"}'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "domainId": "domain_loja", "appId": "app_loja", "revision": "20000000-0000-4000-8000-000000000001", "config": {}, "publication": { "status": "pending", "desiredRevision": "20000000-0000-4000-8000-000000000001", "confirmedRevision": null, "updatedAt": "2026-10-19T20:00:00Z" } }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 409, 412, 413, 415, 422, 428, 429, 500, 503. Veja códigos e repetição.
GET /domains/{domainId}/recovery-config
Seção intitulada “GET /domains/{domainId}/recovery-config”Opções de recuperação disponíveis.
Permissão: recovery_config:read. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
domainId |
path | sim | OpaqueId |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request GET 'https://api.staging.agilink.io/v1/domains/domain_example/recovery-config' \ --header 'Authorization: Bearer <credencial>'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "domainId": "domain_loja", "appId": "app_loja", "revision": "20000000-0000-4000-8000-000000000001", "config": {}, "publication": { "status": "pending", "desiredRevision": "20000000-0000-4000-8000-000000000001", "confirmedRevision": null, "updatedAt": "2026-10-19T20:00:00Z" } }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 422, 429, 500, 503. Veja códigos e repetição.
PUT /domains/{domainId}/recovery-config
Seção intitulada “PUT /domains/{domainId}/recovery-config”Opções de recuperação disponíveis.
Permissão: recovery_config:update. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
domainId |
path | sim | OpaqueId |
Idempotency-Key |
header | sim | UUID v4 por intenção. Recibo por 24h. Mudança de payload/precondição retorna 409. Segredo de chave não é reexibido. |
If-Match |
header | sim | ETag forte obtido em consulta. Ausência 428; revisão antiga 412. |
Corpo: application/json. Campos desconhecidos são rejeitados.
| Campo | Tipo | Obrigatório | Restrição |
|---|---|---|---|
enabled |
boolean | sim | Consulte o schema para restrições e campos internos |
sdkReady |
boolean | sim | Consulte o schema para restrições e campos internos |
appClipBundleId |
string | não | Máximo 255 caracteres |
detection |
object | não | Consulte o schema para restrições e campos internos |
{ "enabled": false, "sdkReady": false}Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request PUT 'https://api.staging.agilink.io/v1/domains/domain_example/recovery-config' \ --header 'Authorization: Bearer <credencial>' \ --header 'Idempotency-Key: 10000000-0000-4000-8000-000000000001' \ --header 'If-Match: "20000000-0000-4000-8000-000000000001"' \ --header 'Content-Type: application/json' \ --data '{"enabled":false,"sdkReady":false}'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "domainId": "domain_loja", "appId": "app_loja", "revision": "20000000-0000-4000-8000-000000000001", "config": {}, "publication": { "status": "pending", "desiredRevision": "20000000-0000-4000-8000-000000000001", "confirmedRevision": null, "updatedAt": "2026-10-19T20:00:00Z" } }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 409, 412, 413, 415, 422, 428, 429, 500, 503. Veja códigos e repetição.
GET /domains/{domainId}/diagnostics
Seção intitulada “GET /domains/{domainId}/diagnostics”Diagnóstico estruturado das associações e publicação.
Permissão: domains:read. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
domainId |
path | sim | OpaqueId |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request GET 'https://api.staging.agilink.io/v1/domains/domain_example/diagnostics' \ --header 'Authorization: Bearer <credencial>'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "domainId": "domain_loja", "appId": "app_loja", "revision": "20000000-0000-4000-8000-000000000001", "configurationSaved": true, "publication": { "status": "pending", "desiredRevision": "20000000-0000-4000-8000-000000000001", "confirmedRevision": null, "updatedAt": "2026-10-19T20:00:00Z" }, "ownership": "unverified", "dns": "pending", "https": "pending", "links": "pending", "androidConfigured": false, "iosConfigured": false, "deviceAssociationTested": false, "appClipVerified": false, "notes": [ "Configuração salva não prova associação em aparelho." ] }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 422, 429, 500, 503. Veja códigos e repetição.
GET /domain-options
Seção intitulada “GET /domain-options”Opções de plataforma e orientações suportadas de domínio raiz.
Permissão: domains:read. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
appId |
query | sim | AppId |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request GET 'https://api.staging.agilink.io/v1/domain-options?appId=app_loja' \ --header 'Authorization: Bearer <credencial>'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "appId": "app_loja", "enabled": true, "mutationsEnabled": true, "platformDomain": "links.staging.agilink.io", "modes": [ "platform" ], "externalDns": { "enabled": false, "apexProfiles": [] } }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 422, 429, 500, 503. Veja códigos e repetição.
GET /domains/{domainId}/dns-records
Seção intitulada “GET /domains/{domainId}/dns-records”Listar registros administráveis.
Permissão: dns:read. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
domainId |
path | sim | OpaqueId |
limit |
query | não | integer |
cursor |
query | não | Cursor |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request GET 'https://api.staging.agilink.io/v1/domains/domain_example/dns-records' \ --header 'Authorization: Bearer <credencial>'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
{ "data": [ { "id": "record_example", "name": "_example.go.example.com", "type": "TXT", "content": "example", "ttl": 300, "proxied": false, "priority": null, "version": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "revision": "20000000-0000-4000-8000-000000000001", "canEdit": true, "canDelete": true, "protectedReason": null } ], "pagination": { "hasMore": false, "nextCursor": null }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 422, 429, 500, 503. Veja códigos e repetição.
POST /domains/{domainId}/dns-records
Seção intitulada “POST /domains/{domainId}/dns-records”Criar registro permitido.
Permissão: dns:create. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
domainId |
path | sim | OpaqueId |
Idempotency-Key |
header | sim | UUID v4 por intenção. Recibo por 24h. Mudança de payload/precondição retorna 409. Segredo de chave não é reexibido. |
If-Match |
header | sim | ETag forte obtido em consulta. Ausência 428; revisão antiga 412. |
Corpo: application/json. Campos desconhecidos são rejeitados.
| Campo | Tipo | Obrigatório | Restrição |
|---|---|---|---|
type |
— | sim | Valores: A, AAAA, CNAME, TXT, MX |
name |
string | sim | Máximo 253 caracteres |
content |
string | sim | Máximo 2048 caracteres |
ttl |
integer | sim | Consulte o schema para restrições e campos internos |
proxied |
boolean | não | Consulte o schema para restrições e campos internos |
priority |
integer | não | Consulte o schema para restrições e campos internos |
{ "type": "TXT", "name": "_example.go.example.com", "content": "example", "ttl": 300, "proxied": false}Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request POST 'https://api.staging.agilink.io/v1/domains/domain_example/dns-records' \ --header 'Authorization: Bearer <credencial>' \ --header 'Idempotency-Key: 10000000-0000-4000-8000-000000000001' \ --header 'If-Match: "20000000-0000-4000-8000-000000000001"' \ --header 'Content-Type: application/json' \ --data '{"type":"TXT","name":"_example.go.example.com","content":"example","ttl":300,"proxied":false}'Resposta: 202. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
Location |
Operação a acompanhar. | /v1/operations/op_example |
Retry-After |
Segundos até a próxima consulta. | 1 |
{ "data": { "id": "op_example", "appId": "app_loja", "type": "link.resync", "status": "queued", "createdAt": "2026-10-19T20:00:00Z", "updatedAt": "2026-10-19T20:00:00Z", "revision": "20000000-0000-4000-8000-000000000001", "result": null, "error": null }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 409, 412, 413, 415, 422, 428, 429, 500, 503. Veja códigos e repetição.
PATCH /domains/{domainId}/dns-records/{recordId}
Seção intitulada “PATCH /domains/{domainId}/dns-records/{recordId}”Alterar/remover registro permitido.
Permissão: dns:update. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
domainId |
path | sim | OpaqueId |
recordId |
path | sim | OpaqueId |
Idempotency-Key |
header | sim | UUID v4 por intenção. Recibo por 24h. Mudança de payload/precondição retorna 409. Segredo de chave não é reexibido. |
If-Match |
header | sim | ETag forte obtido em consulta. Ausência 428; revisão antiga 412. |
Corpo: application/json. Campos desconhecidos são rejeitados.
| Campo | Tipo | Obrigatório | Restrição |
|---|---|---|---|
type |
— | sim | Valores: A, AAAA, CNAME, TXT, MX |
name |
string | sim | Máximo 253 caracteres |
content |
string | sim | Máximo 2048 caracteres |
ttl |
integer | sim | Consulte o schema para restrições e campos internos |
proxied |
boolean | não | Consulte o schema para restrições e campos internos |
priority |
integer | não | Consulte o schema para restrições e campos internos |
{ "type": "TXT", "name": "_example.go.example.com", "content": "example", "ttl": 300, "proxied": false}Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request PATCH 'https://api.staging.agilink.io/v1/domains/domain_example/dns-records/record_example' \ --header 'Authorization: Bearer <credencial>' \ --header 'Idempotency-Key: 10000000-0000-4000-8000-000000000001' \ --header 'If-Match: "20000000-0000-4000-8000-000000000001"' \ --header 'Content-Type: application/json' \ --data '{"type":"TXT","name":"_example.go.example.com","content":"example","ttl":300,"proxied":false}'Resposta: 202. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
Location |
Operação a acompanhar. | /v1/operations/op_example |
Retry-After |
Segundos até a próxima consulta. | 1 |
{ "data": { "id": "op_example", "appId": "app_loja", "type": "link.resync", "status": "queued", "createdAt": "2026-10-19T20:00:00Z", "updatedAt": "2026-10-19T20:00:00Z", "revision": "20000000-0000-4000-8000-000000000001", "result": null, "error": null }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 409, 412, 413, 415, 422, 428, 429, 500, 503. Veja códigos e repetição.
DELETE /domains/{domainId}/dns-records/{recordId}
Seção intitulada “DELETE /domains/{domainId}/dns-records/{recordId}”Alterar/remover registro permitido.
Permissão: dns:delete. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
domainId |
path | sim | OpaqueId |
recordId |
path | sim | OpaqueId |
Idempotency-Key |
header | sim | UUID v4 por intenção. Recibo por 24h. Mudança de payload/precondição retorna 409. Segredo de chave não é reexibido. |
If-Match |
header | sim | ETag forte obtido em consulta. Ausência 428; revisão antiga 412. |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request DELETE 'https://api.staging.agilink.io/v1/domains/domain_example/dns-records/record_example' \ --header 'Authorization: Bearer <credencial>' \ --header 'Idempotency-Key: 10000000-0000-4000-8000-000000000001' \ --header 'If-Match: "20000000-0000-4000-8000-000000000001"'Resposta: 202. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
Location |
Operação a acompanhar. | /v1/operations/op_example |
Retry-After |
Segundos até a próxima consulta. | 1 |
{ "data": { "id": "op_example", "appId": "app_loja", "type": "link.resync", "status": "queued", "createdAt": "2026-10-19T20:00:00Z", "updatedAt": "2026-10-19T20:00:00Z", "revision": "20000000-0000-4000-8000-000000000001", "result": null, "error": null }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 409, 412, 413, 422, 428, 429, 500, 503. Veja códigos e repetição.
GET /apps/{appId}/template-defaults
Seção intitulada “GET /apps/{appId}/template-defaults”Padrões por app.
Permissão: template_bindings:read. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
appId |
path | sim | OpaqueId |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request GET 'https://api.staging.agilink.io/v1/apps/app_loja/template-defaults' \ --header 'Authorization: Bearer <credencial>'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "appId": "app_loja", "scope": "app", "revision": "20000000-0000-4000-8000-000000000001", "enabled": true, "current": { "android": { "mode": "inherit" }, "ios": { "mode": "inherit" }, "recovery": { "mode": "inherit" } }, "effective": { "android": { "mode": "inherit" }, "ios": { "mode": "inherit" }, "recovery": { "mode": "inherit" } }, "inherited": { "android": { "mode": "inherit" }, "ios": { "mode": "inherit" }, "recovery": { "mode": "inherit" } }, "templateData": {} }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 422, 429, 500, 503. Veja códigos e repetição.
PUT /apps/{appId}/template-defaults
Seção intitulada “PUT /apps/{appId}/template-defaults”Padrões por app.
Permissão: template_bindings:update. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
appId |
path | sim | OpaqueId |
Idempotency-Key |
header | sim | UUID v4 por intenção. Recibo por 24h. Mudança de payload/precondição retorna 409. Segredo de chave não é reexibido. |
If-Match |
header | sim | ETag forte obtido em consulta. Ausência 428; revisão antiga 412. |
Corpo: application/json. Campos desconhecidos são rejeitados.
| Campo | Tipo | Obrigatório | Restrição |
|---|---|---|---|
baseTemplateId |
— | sim | Valores: android, ios, recovery |
choice |
TemplateChoice | sim | Consulte o schema para restrições e campos internos |
{ "baseTemplateId": "android", "choice": { "mode": "official" }}Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request PUT 'https://api.staging.agilink.io/v1/apps/app_loja/template-defaults' \ --header 'Authorization: Bearer <credencial>' \ --header 'Idempotency-Key: 10000000-0000-4000-8000-000000000001' \ --header 'If-Match: "20000000-0000-4000-8000-000000000001"' \ --header 'Content-Type: application/json' \ --data '{"baseTemplateId":"android","choice":{"mode":"official"}}'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "appId": "app_loja", "scope": "app", "revision": "20000000-0000-4000-8000-000000000001", "enabled": true, "current": { "android": { "mode": "inherit" }, "ios": { "mode": "inherit" }, "recovery": { "mode": "inherit" } }, "effective": { "android": { "mode": "inherit" }, "ios": { "mode": "inherit" }, "recovery": { "mode": "inherit" } }, "inherited": { "android": { "mode": "inherit" }, "ios": { "mode": "inherit" }, "recovery": { "mode": "inherit" } }, "templateData": {} }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 409, 412, 413, 415, 422, 428, 429, 500, 503. Veja códigos e repetição.
GET /domains/{domainId}/template-defaults
Seção intitulada “GET /domains/{domainId}/template-defaults”Padrões de templates por plataforma.
Permissão: template_bindings:read. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
domainId |
path | sim | OpaqueId |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request GET 'https://api.staging.agilink.io/v1/domains/domain_example/template-defaults' \ --header 'Authorization: Bearer <credencial>'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "appId": "app_loja", "scope": "app", "revision": "20000000-0000-4000-8000-000000000001", "enabled": true, "current": { "android": { "mode": "inherit" }, "ios": { "mode": "inherit" }, "recovery": { "mode": "inherit" } }, "effective": { "android": { "mode": "inherit" }, "ios": { "mode": "inherit" }, "recovery": { "mode": "inherit" } }, "inherited": { "android": { "mode": "inherit" }, "ios": { "mode": "inherit" }, "recovery": { "mode": "inherit" } }, "templateData": {} }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 422, 429, 500, 503. Veja códigos e repetição.
PUT /domains/{domainId}/template-defaults
Seção intitulada “PUT /domains/{domainId}/template-defaults”Padrões de templates por plataforma.
Permissão: template_bindings:update. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
domainId |
path | sim | OpaqueId |
Idempotency-Key |
header | sim | UUID v4 por intenção. Recibo por 24h. Mudança de payload/precondição retorna 409. Segredo de chave não é reexibido. |
If-Match |
header | sim | ETag forte obtido em consulta. Ausência 428; revisão antiga 412. |
Corpo: application/json. Campos desconhecidos são rejeitados.
| Campo | Tipo | Obrigatório | Restrição |
|---|---|---|---|
baseTemplateId |
— | sim | Valores: android, ios, recovery |
choice |
TemplateChoice | sim | Consulte o schema para restrições e campos internos |
{ "baseTemplateId": "android", "choice": { "mode": "official" }}Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request PUT 'https://api.staging.agilink.io/v1/domains/domain_example/template-defaults' \ --header 'Authorization: Bearer <credencial>' \ --header 'Idempotency-Key: 10000000-0000-4000-8000-000000000001' \ --header 'If-Match: "20000000-0000-4000-8000-000000000001"' \ --header 'Content-Type: application/json' \ --data '{"baseTemplateId":"android","choice":{"mode":"official"}}'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "appId": "app_loja", "scope": "app", "revision": "20000000-0000-4000-8000-000000000001", "enabled": true, "current": { "android": { "mode": "inherit" }, "ios": { "mode": "inherit" }, "recovery": { "mode": "inherit" } }, "effective": { "android": { "mode": "inherit" }, "ios": { "mode": "inherit" }, "recovery": { "mode": "inherit" } }, "inherited": { "android": { "mode": "inherit" }, "ios": { "mode": "inherit" }, "recovery": { "mode": "inherit" } }, "templateData": {} }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 409, 412, 413, 415, 422, 428, 429, 500, 503. Veja códigos e repetição.
GET /links/{linkId}/template-selection
Seção intitulada “GET /links/{linkId}/template-selection”Ler/alterar apresentação por plataforma.
Permissão: template_bindings:read. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
linkId |
path | sim | LinkId |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request GET 'https://api.staging.agilink.io/v1/links/go.example.com~-ofertas~-tenis/template-selection' \ --header 'Authorization: Bearer <credencial>'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "appId": "app_loja", "scope": "app", "revision": "20000000-0000-4000-8000-000000000001", "enabled": true, "current": { "android": { "mode": "inherit" }, "ios": { "mode": "inherit" }, "recovery": { "mode": "inherit" } }, "effective": { "android": { "mode": "inherit" }, "ios": { "mode": "inherit" }, "recovery": { "mode": "inherit" } }, "inherited": { "android": { "mode": "inherit" }, "ios": { "mode": "inherit" }, "recovery": { "mode": "inherit" } }, "templateData": {} }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 422, 429, 500, 503. Veja códigos e repetição.
PUT /links/{linkId}/template-selection
Seção intitulada “PUT /links/{linkId}/template-selection”Ler/alterar apresentação por plataforma.
Permissão: template_bindings:update. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
linkId |
path | sim | LinkId |
Idempotency-Key |
header | sim | UUID v4 por intenção. Recibo por 24h. Mudança de payload/precondição retorna 409. Segredo de chave não é reexibido. |
If-Match |
header | sim | ETag forte obtido em consulta. Ausência 428; revisão antiga 412. |
Corpo: application/json. Campos desconhecidos são rejeitados.
| Campo | Tipo | Obrigatório | Restrição |
|---|---|---|---|
baseTemplateId |
— | sim | Valores: android, ios, recovery |
choice |
TemplateChoice | sim | Consulte o schema para restrições e campos internos |
{ "baseTemplateId": "android", "choice": { "mode": "official" }}Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request PUT 'https://api.staging.agilink.io/v1/links/go.example.com~-ofertas~-tenis/template-selection' \ --header 'Authorization: Bearer <credencial>' \ --header 'Idempotency-Key: 10000000-0000-4000-8000-000000000001' \ --header 'If-Match: "20000000-0000-4000-8000-000000000001"' \ --header 'Content-Type: application/json' \ --data '{"baseTemplateId":"android","choice":{"mode":"official"}}'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "appId": "app_loja", "scope": "app", "revision": "20000000-0000-4000-8000-000000000001", "enabled": true, "current": { "android": { "mode": "inherit" }, "ios": { "mode": "inherit" }, "recovery": { "mode": "inherit" } }, "effective": { "android": { "mode": "inherit" }, "ios": { "mode": "inherit" }, "recovery": { "mode": "inherit" } }, "inherited": { "android": { "mode": "inherit" }, "ios": { "mode": "inherit" }, "recovery": { "mode": "inherit" } }, "templateData": {} }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 409, 412, 413, 415, 422, 428, 429, 500, 503. Veja códigos e repetição.
GET /template-catalog
Seção intitulada “GET /template-catalog”Modelos oficiais, plataformas e capacidades.
Permissão: templates:read. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
appId |
query | sim | AppId |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request GET 'https://api.staging.agilink.io/v1/template-catalog?appId=app_loja' \ --header 'Authorization: Bearer <credencial>'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
{ "data": [ { "id": "android", "rendererContractVersion": 1, "states": [ "manual", "opening", "fallback" ], "actions": [ "open-app", "open-browser" ], "nativeVariables": [ "link.titulo", "link.descricao", "app.nome" ], "themes": { "light": { "background": "#f8fafc", "surface": "#ffffff", "border": "#e2e8f0", "text": "#0f172a", "muted": "#64748b", "accent": "#0284c7", "secondary": "#059669", "tertiary": "#f1f5f9" }, "dark": { "background": "#0c0d0e", "surface": "#141517", "border": "#26272b", "text": "#f4f4f5", "muted": "#a1a1aa", "accent": "#0284c7", "secondary": "#10b981", "tertiary": "#1c1d20" } } }, { "id": "ios", "rendererContractVersion": 1, "states": [ "opening", "fallback" ], "actions": [ "open-app", "install", "open-browser" ], "nativeVariables": [ "link.titulo", "link.descricao", "app.nome" ], "themes": { "light": { "background": "#f8fafc", "surface": "#ffffff", "border": "#e2e8f0", "text": "#0f172a", "muted": "#64748b", "accent": "#0284c7", "secondary": "#0f172a", "tertiary": "#f1f5f9" }, "dark": { "background": "#0c0d0e", "surface": "#141517", "border": "#26272b", "text": "#f4f4f5", "muted": "#a1a1aa", "accent": "#0284c7", "secondary": "#27272a", "tertiary": "#1c1d20" } } }, { "id": "recovery", "rendererContractVersion": 1, "states": [ "copy-only", "default", "copied", "manual", "fallback" ], "actions": [ "copy-install", "install", "open-app", "copy-clip" ], "nativeVariables": [ "link.titulo", "link.descricao", "app.nome" ], "themes": { "light": { "background": "#f8fafc", "surface": "#ffffff", "border": "#e2e8f0", "text": "#0f172a", "muted": "#64748b", "accent": "#0284c7", "secondary": "#059669", "tertiary": "#f1f5f9" }, "dark": { "background": "#0c0d0e", "surface": "#141517", "border": "#26272b", "text": "#f4f4f5", "muted": "#a1a1aa", "accent": "#0284c7", "secondary": "#10b981", "tertiary": "#1c1d20" } } } ], "pagination": { "hasMore": false, "nextCursor": null }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 422, 429, 500, 503. Veja códigos e repetição.
GET /template-catalog/{baseId}/schema
Seção intitulada “GET /template-catalog/{baseId}/schema”Campos, variáveis, tipos e restrições.
Permissão: templates:read. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
baseId |
path | sim | OpaqueId |
appId |
query | sim | AppId |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request GET 'https://api.staging.agilink.io/v1/template-catalog/android/schema?appId=app_loja' \ --header 'Authorization: Bearer <credencial>'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "baseTemplateId": "android", "limits": { "configBytes": 12288, "dataBytes": 8192, "variables": 20, "details": 4 }, "schema": { "type": "object", "additionalProperties": false, "properties": { "schemaVersion": { "const": 1 }, "kind": { "const": "preset" }, "baseTemplateId": { "enum": [ "android", "ios", "recovery" ] }, "rendererContractVersion": { "const": 1 }, "appearance": { "type": "object", "additionalProperties": false, "properties": { "light": { "type": "object", "additionalProperties": false, "properties": { "background": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }, "surface": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }, "border": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }, "text": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }, "muted": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }, "accent": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }, "secondary": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }, "tertiary": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" } }, "required": [] }, "dark": { "type": "object", "additionalProperties": false, "properties": { "background": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }, "surface": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }, "border": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }, "text": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }, "muted": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }, "accent": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }, "secondary": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }, "tertiary": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" } }, "required": [] }, "fontFamily": { "enum": [ "system", "sans", "serif" ] }, "radius": { "enum": [ "small", "medium", "large" ] }, "spacing": { "enum": [ "compact", "comfortable" ] }, "logoAssetId": { "type": "string", "maxLength": 100 } }, "required": [] }, "content": { "type": "object", "additionalProperties": false, "properties": { "heading": { "type": "string", "maxLength": 120 }, "supportingText": { "type": "string", "maxLength": 1000 }, "actionLabels": { "type": "object", "additionalProperties": { "type": "string", "maxLength": 120 } }, "details": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "label": { "type": "string", "maxLength": 80 }, "value": { "type": "string", "maxLength": 1000 } }, "required": [ "label", "value" ] }, "maxItems": 4 } }, "required": [] }, "variables": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "key": { "type": "string", "pattern": "^[a-z][a-z0-9_]{0,39}$" }, "label": { "type": "string", "maxLength": 80 }, "type": { "enum": [ "text", "number", "boolean" ] }, "required": { "type": "boolean" }, "maxLength": { "type": "integer", "minimum": 1, "maximum": 4000 }, "defaultValue": { "type": [ "string", "number", "boolean" ] } }, "required": [ "key" ] }, "maxItems": 20 } }, "required": [] }, "example": { "schemaVersion": 1, "kind": "preset", "baseTemplateId": "android", "rendererContractVersion": 1, "appearance": { "light": { "background": "#f8fafc", "surface": "#ffffff", "border": "#e2e8f0", "text": "#0f172a", "muted": "#64748b", "accent": "#0284c7", "secondary": "#059669", "tertiary": "#f1f5f9" }, "dark": { "background": "#0c0d0e", "surface": "#141517", "border": "#26272b", "text": "#f4f4f5", "muted": "#a1a1aa", "accent": "#0284c7", "secondary": "#10b981", "tertiary": "#1c1d20" }, "fontFamily": "system", "radius": "large", "spacing": "comfortable" }, "content": {}, "variables": [] } }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 422, 429, 500, 503. Veja códigos e repetição.
GET /template-choices
Seção intitulada “GET /template-choices”Seleções válidas para contexto app/domínio/link.
Permissão: templates:read. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
appId |
query | sim | AppId |
limit |
query | não | integer |
cursor |
query | não | Cursor |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request GET 'https://api.staging.agilink.io/v1/template-choices?appId=app_loja' \ --header 'Authorization: Bearer <credencial>'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
{ "data": [ { "templateId": "60000000-0000-4000-8000-000000000001", "version": 1, "baseTemplateId": "android", "name": "Página da loja", "variables": [] } ], "pagination": { "hasMore": false, "nextCursor": null }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 422, 429, 500, 503. Veja códigos e repetição.
GET /templates
Seção intitulada “GET /templates”Biblioteca e criação por app.
Permissão: templates:read. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
appId |
query | sim | AppId |
limit |
query | não | integer |
cursor |
query | não | Cursor |
archived |
query | não | — |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request GET 'https://api.staging.agilink.io/v1/templates?appId=app_loja' \ --header 'Authorization: Bearer <credencial>'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
{ "data": [ { "id": "60000000-0000-4000-8000-000000000001", "appId": "app_loja", "name": "Página da loja", "baseTemplateId": "android", "archived": false, "revision": "20000000-0000-4000-8000-000000000001", "createdAt": "2026-10-19T20:00:00Z", "updatedAt": "2026-10-19T20:00:00Z" } ], "pagination": { "hasMore": false, "nextCursor": null }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 422, 429, 500, 503. Veja códigos e repetição.
POST /templates
Seção intitulada “POST /templates”Biblioteca e criação por app.
Permissão: templates:create. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
Idempotency-Key |
header | sim | UUID v4 por intenção. Recibo por 24h. Mudança de payload/precondição retorna 409. Segredo de chave não é reexibido. |
Corpo: application/json. Campos desconhecidos são rejeitados.
| Campo | Tipo | Obrigatório | Restrição |
|---|---|---|---|
appId |
AppId | sim | Consulte o schema para restrições e campos internos |
name |
string | sim | Máximo 100 caracteres |
baseTemplateId |
— | sim | Valores: android, ios, recovery |
config |
TemplateConfig | não | Consulte o schema para restrições e campos internos |
{ "appId": "app_loja", "name": "Página da loja", "baseTemplateId": "android", "config": { "schemaVersion": 1, "kind": "preset", "baseTemplateId": "android", "rendererContractVersion": 1, "appearance": { "light": { "background": "#f8fafc", "surface": "#ffffff", "border": "#e2e8f0", "text": "#0f172a", "muted": "#64748b", "accent": "#0284c7", "secondary": "#059669", "tertiary": "#f1f5f9" }, "dark": { "background": "#0c0d0e", "surface": "#141517", "border": "#26272b", "text": "#f4f4f5", "muted": "#a1a1aa", "accent": "#0284c7", "secondary": "#10b981", "tertiary": "#1c1d20" }, "fontFamily": "system", "radius": "large", "spacing": "comfortable" }, "content": {}, "variables": [] }}Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request POST 'https://api.staging.agilink.io/v1/templates' \ --header 'Authorization: Bearer <credencial>' \ --header 'Idempotency-Key: 10000000-0000-4000-8000-000000000001' \ --header 'Content-Type: application/json' \ --data '{"appId":"app_loja","name":"Página da loja","baseTemplateId":"android","config":{"schemaVersion":1,"kind":"preset","baseTemplateId":"android","rendererContractVersion":1,"appearance":{"light":{"background":"#f8fafc","surface":"#ffffff","border":"#e2e8f0","text":"#0f172a","muted":"#64748b","accent":"#0284c7","secondary":"#059669","tertiary":"#f1f5f9"},"dark":{"background":"#0c0d0e","surface":"#141517","border":"#26272b","text":"#f4f4f5","muted":"#a1a1aa","accent":"#0284c7","secondary":"#10b981","tertiary":"#1c1d20"},"fontFamily":"system","radius":"large","spacing":"comfortable"},"content":{},"variables":[]}}'Resposta: 201. Criado. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
Location |
Endereço relativo do recurso criado. | /v1/templates/60000000-0000-4000-8000-000000000001 |
{ "data": { "template": { "id": "60000000-0000-4000-8000-000000000001", "appId": "app_loja", "name": "Página da loja", "baseTemplateId": "android", "archived": false, "revision": "20000000-0000-4000-8000-000000000001", "createdAt": "2026-10-19T20:00:00Z", "updatedAt": "2026-10-19T20:00:00Z" }, "draft": { "templateId": "60000000-0000-4000-8000-000000000001", "config": { "schemaVersion": 1, "kind": "preset", "baseTemplateId": "android", "rendererContractVersion": 1, "appearance": { "light": { "background": "#f8fafc", "surface": "#ffffff", "border": "#e2e8f0", "text": "#0f172a", "muted": "#64748b", "accent": "#0284c7", "secondary": "#059669", "tertiary": "#f1f5f9" }, "dark": { "background": "#0c0d0e", "surface": "#141517", "border": "#26272b", "text": "#f4f4f5", "muted": "#a1a1aa", "accent": "#0284c7", "secondary": "#10b981", "tertiary": "#1c1d20" }, "fontFamily": "system", "radius": "large", "spacing": "comfortable" }, "content": {}, "variables": [] }, "revision": "20000000-0000-4000-8000-000000000001", "baseVersion": null, "updatedAt": "2026-10-19T20:00:00Z" }, "revision": "20000000-0000-4000-8000-000000000001" }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 409, 413, 415, 422, 429, 500, 503. Veja códigos e repetição.
GET /templates/{templateId}
Seção intitulada “GET /templates/{templateId}”Detalhe, nome e arquivamento.
Permissão: templates:read. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
templateId |
path | sim | OpaqueId |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request GET 'https://api.staging.agilink.io/v1/templates/60000000-0000-4000-8000-000000000001' \ --header 'Authorization: Bearer <credencial>'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "template": { "id": "60000000-0000-4000-8000-000000000001", "appId": "app_loja", "name": "Página da loja", "baseTemplateId": "android", "archived": false, "revision": "20000000-0000-4000-8000-000000000001", "createdAt": "2026-10-19T20:00:00Z", "updatedAt": "2026-10-19T20:00:00Z" }, "draft": { "templateId": "60000000-0000-4000-8000-000000000001", "config": { "schemaVersion": 1, "kind": "preset", "baseTemplateId": "android", "rendererContractVersion": 1, "appearance": { "light": { "background": "#f8fafc", "surface": "#ffffff", "border": "#e2e8f0", "text": "#0f172a", "muted": "#64748b", "accent": "#0284c7", "secondary": "#059669", "tertiary": "#f1f5f9" }, "dark": { "background": "#0c0d0e", "surface": "#141517", "border": "#26272b", "text": "#f4f4f5", "muted": "#a1a1aa", "accent": "#0284c7", "secondary": "#10b981", "tertiary": "#1c1d20" }, "fontFamily": "system", "radius": "large", "spacing": "comfortable" }, "content": {}, "variables": [] }, "revision": "20000000-0000-4000-8000-000000000001", "baseVersion": null, "updatedAt": "2026-10-19T20:00:00Z" }, "revision": "20000000-0000-4000-8000-000000000001" }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 422, 429, 500, 503. Veja códigos e repetição.
PATCH /templates/{templateId}
Seção intitulada “PATCH /templates/{templateId}”Detalhe, nome e arquivamento.
Permissão: templates:update. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
templateId |
path | sim | OpaqueId |
Idempotency-Key |
header | sim | UUID v4 por intenção. Recibo por 24h. Mudança de payload/precondição retorna 409. Segredo de chave não é reexibido. |
If-Match |
header | sim | ETag forte obtido em consulta. Ausência 428; revisão antiga 412. |
Corpo: application/json. Campos desconhecidos são rejeitados.
| Campo | Tipo | Obrigatório | Restrição |
|---|---|---|---|
name |
string | não | Máximo 100 caracteres |
archived |
boolean | não | Consulte o schema para restrições e campos internos |
{ "name": "Página editada"}Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request PATCH 'https://api.staging.agilink.io/v1/templates/60000000-0000-4000-8000-000000000001' \ --header 'Authorization: Bearer <credencial>' \ --header 'Idempotency-Key: 10000000-0000-4000-8000-000000000001' \ --header 'If-Match: "20000000-0000-4000-8000-000000000001"' \ --header 'Content-Type: application/json' \ --data '{"name":"Página editada"}'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "template": { "id": "60000000-0000-4000-8000-000000000001", "appId": "app_loja", "name": "Página da loja", "baseTemplateId": "android", "archived": false, "revision": "20000000-0000-4000-8000-000000000001", "createdAt": "2026-10-19T20:00:00Z", "updatedAt": "2026-10-19T20:00:00Z" }, "draft": { "templateId": "60000000-0000-4000-8000-000000000001", "config": { "schemaVersion": 1, "kind": "preset", "baseTemplateId": "android", "rendererContractVersion": 1, "appearance": { "light": { "background": "#f8fafc", "surface": "#ffffff", "border": "#e2e8f0", "text": "#0f172a", "muted": "#64748b", "accent": "#0284c7", "secondary": "#059669", "tertiary": "#f1f5f9" }, "dark": { "background": "#0c0d0e", "surface": "#141517", "border": "#26272b", "text": "#f4f4f5", "muted": "#a1a1aa", "accent": "#0284c7", "secondary": "#10b981", "tertiary": "#1c1d20" }, "fontFamily": "system", "radius": "large", "spacing": "comfortable" }, "content": {}, "variables": [] }, "revision": "20000000-0000-4000-8000-000000000001", "baseVersion": null, "updatedAt": "2026-10-19T20:00:00Z" }, "revision": "20000000-0000-4000-8000-000000000001" }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 409, 412, 413, 415, 422, 428, 429, 500, 503. Veja códigos e repetição.
POST /templates/{templateId}/duplicate
Seção intitulada “POST /templates/{templateId}/duplicate”Duplicar rascunho ou versão.
Permissão: templates:create. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
templateId |
path | sim | OpaqueId |
Idempotency-Key |
header | sim | UUID v4 por intenção. Recibo por 24h. Mudança de payload/precondição retorna 409. Segredo de chave não é reexibido. |
Corpo: application/json. Campos desconhecidos são rejeitados.
| Campo | Tipo | Obrigatório | Restrição |
|---|---|---|---|
name |
string | sim | Máximo 100 caracteres |
sourceVersion |
integer | não | Consulte o schema para restrições e campos internos |
draftRevision |
Revision | não | Consulte o schema para restrições e campos internos |
{ "name": "Cópia", "draftRevision": "20000000-0000-4000-8000-000000000001"}Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request POST 'https://api.staging.agilink.io/v1/templates/60000000-0000-4000-8000-000000000001/duplicate' \ --header 'Authorization: Bearer <credencial>' \ --header 'Idempotency-Key: 10000000-0000-4000-8000-000000000001' \ --header 'Content-Type: application/json' \ --data '{"name":"Cópia","draftRevision":"20000000-0000-4000-8000-000000000001"}'Resposta: 201. Criado. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
Location |
Endereço relativo do recurso criado. | /v1/templates/60000000-0000-4000-8000-000000000001 |
{ "data": { "template": { "id": "60000000-0000-4000-8000-000000000001", "appId": "app_loja", "name": "Página da loja", "baseTemplateId": "android", "archived": false, "revision": "20000000-0000-4000-8000-000000000001", "createdAt": "2026-10-19T20:00:00Z", "updatedAt": "2026-10-19T20:00:00Z" }, "draft": { "templateId": "60000000-0000-4000-8000-000000000001", "config": { "schemaVersion": 1, "kind": "preset", "baseTemplateId": "android", "rendererContractVersion": 1, "appearance": { "light": { "background": "#f8fafc", "surface": "#ffffff", "border": "#e2e8f0", "text": "#0f172a", "muted": "#64748b", "accent": "#0284c7", "secondary": "#059669", "tertiary": "#f1f5f9" }, "dark": { "background": "#0c0d0e", "surface": "#141517", "border": "#26272b", "text": "#f4f4f5", "muted": "#a1a1aa", "accent": "#0284c7", "secondary": "#10b981", "tertiary": "#1c1d20" }, "fontFamily": "system", "radius": "large", "spacing": "comfortable" }, "content": {}, "variables": [] }, "revision": "20000000-0000-4000-8000-000000000001", "baseVersion": null, "updatedAt": "2026-10-19T20:00:00Z" }, "revision": "20000000-0000-4000-8000-000000000001" }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 409, 413, 415, 422, 429, 500, 503. Veja códigos e repetição.
GET /templates/{templateId}/draft
Seção intitulada “GET /templates/{templateId}/draft”Consultar/salvar rascunho com revisão própria.
Permissão: templates:read. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
templateId |
path | sim | OpaqueId |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request GET 'https://api.staging.agilink.io/v1/templates/60000000-0000-4000-8000-000000000001/draft' \ --header 'Authorization: Bearer <credencial>'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "templateId": "60000000-0000-4000-8000-000000000001", "config": { "schemaVersion": 1, "kind": "preset", "baseTemplateId": "android", "rendererContractVersion": 1, "appearance": { "light": { "background": "#f8fafc", "surface": "#ffffff", "border": "#e2e8f0", "text": "#0f172a", "muted": "#64748b", "accent": "#0284c7", "secondary": "#059669", "tertiary": "#f1f5f9" }, "dark": { "background": "#0c0d0e", "surface": "#141517", "border": "#26272b", "text": "#f4f4f5", "muted": "#a1a1aa", "accent": "#0284c7", "secondary": "#10b981", "tertiary": "#1c1d20" }, "fontFamily": "system", "radius": "large", "spacing": "comfortable" }, "content": {}, "variables": [] }, "revision": "20000000-0000-4000-8000-000000000001", "baseVersion": null, "updatedAt": "2026-10-19T20:00:00Z" }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 422, 429, 500, 503. Veja códigos e repetição.
PUT /templates/{templateId}/draft
Seção intitulada “PUT /templates/{templateId}/draft”Consultar/salvar rascunho com revisão própria.
Permissão: templates:update. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
templateId |
path | sim | OpaqueId |
Idempotency-Key |
header | sim | UUID v4 por intenção. Recibo por 24h. Mudança de payload/precondição retorna 409. Segredo de chave não é reexibido. |
If-Match |
header | sim | ETag forte obtido em consulta. Ausência 428; revisão antiga 412. |
Corpo: application/json. Campos desconhecidos são rejeitados.
| Campo | Tipo | Obrigatório | Restrição |
|---|---|---|---|
config |
TemplateConfig | sim | Consulte o schema para restrições e campos internos |
{ "config": { "schemaVersion": 1, "kind": "preset", "baseTemplateId": "android", "rendererContractVersion": 1, "appearance": { "light": { "background": "#f8fafc", "surface": "#ffffff", "border": "#e2e8f0", "text": "#0f172a", "muted": "#64748b", "accent": "#0284c7", "secondary": "#059669", "tertiary": "#f1f5f9" }, "dark": { "background": "#0c0d0e", "surface": "#141517", "border": "#26272b", "text": "#f4f4f5", "muted": "#a1a1aa", "accent": "#0284c7", "secondary": "#10b981", "tertiary": "#1c1d20" }, "fontFamily": "system", "radius": "large", "spacing": "comfortable" }, "content": {}, "variables": [] }}Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request PUT 'https://api.staging.agilink.io/v1/templates/60000000-0000-4000-8000-000000000001/draft' \ --header 'Authorization: Bearer <credencial>' \ --header 'Idempotency-Key: 10000000-0000-4000-8000-000000000001' \ --header 'If-Match: "20000000-0000-4000-8000-000000000001"' \ --header 'Content-Type: application/json' \ --data '{"config":{"schemaVersion":1,"kind":"preset","baseTemplateId":"android","rendererContractVersion":1,"appearance":{"light":{"background":"#f8fafc","surface":"#ffffff","border":"#e2e8f0","text":"#0f172a","muted":"#64748b","accent":"#0284c7","secondary":"#059669","tertiary":"#f1f5f9"},"dark":{"background":"#0c0d0e","surface":"#141517","border":"#26272b","text":"#f4f4f5","muted":"#a1a1aa","accent":"#0284c7","secondary":"#10b981","tertiary":"#1c1d20"},"fontFamily":"system","radius":"large","spacing":"comfortable"},"content":{},"variables":[]}}'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "templateId": "60000000-0000-4000-8000-000000000001", "config": { "schemaVersion": 1, "kind": "preset", "baseTemplateId": "android", "rendererContractVersion": 1, "appearance": { "light": { "background": "#f8fafc", "surface": "#ffffff", "border": "#e2e8f0", "text": "#0f172a", "muted": "#64748b", "accent": "#0284c7", "secondary": "#059669", "tertiary": "#f1f5f9" }, "dark": { "background": "#0c0d0e", "surface": "#141517", "border": "#26272b", "text": "#f4f4f5", "muted": "#a1a1aa", "accent": "#0284c7", "secondary": "#10b981", "tertiary": "#1c1d20" }, "fontFamily": "system", "radius": "large", "spacing": "comfortable" }, "content": {}, "variables": [] }, "revision": "20000000-0000-4000-8000-000000000001", "baseVersion": null, "updatedAt": "2026-10-19T20:00:00Z" }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 409, 412, 413, 415, 422, 428, 429, 500, 503. Veja códigos e repetição.
POST /templates/{templateId}/validate
Seção intitulada “POST /templates/{templateId}/validate”Validar configuração e variáveis.
Permissão: templates:validate. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
templateId |
path | sim | OpaqueId |
Idempotency-Key |
header | sim | UUID v4 por intenção. Recibo por 24h. Mudança de payload/precondição retorna 409. Segredo de chave não é reexibido. |
Corpo: application/json. Campos desconhecidos são rejeitados.
| Campo | Tipo | Obrigatório | Restrição |
|---|---|---|---|
config |
TemplateConfig | sim | Consulte o schema para restrições e campos internos |
usage |
— | não | Valores: link, default |
{ "config": { "schemaVersion": 1, "kind": "preset", "baseTemplateId": "android", "rendererContractVersion": 1, "appearance": { "light": { "background": "#f8fafc", "surface": "#ffffff", "border": "#e2e8f0", "text": "#0f172a", "muted": "#64748b", "accent": "#0284c7", "secondary": "#059669", "tertiary": "#f1f5f9" }, "dark": { "background": "#0c0d0e", "surface": "#141517", "border": "#26272b", "text": "#f4f4f5", "muted": "#a1a1aa", "accent": "#0284c7", "secondary": "#10b981", "tertiary": "#1c1d20" }, "fontFamily": "system", "radius": "large", "spacing": "comfortable" }, "content": {}, "variables": [] }, "usage": "link"}Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request POST 'https://api.staging.agilink.io/v1/templates/60000000-0000-4000-8000-000000000001/validate' \ --header 'Authorization: Bearer <credencial>' \ --header 'Idempotency-Key: 10000000-0000-4000-8000-000000000001' \ --header 'Content-Type: application/json' \ --data '{"config":{"schemaVersion":1,"kind":"preset","baseTemplateId":"android","rendererContractVersion":1,"appearance":{"light":{"background":"#f8fafc","surface":"#ffffff","border":"#e2e8f0","text":"#0f172a","muted":"#64748b","accent":"#0284c7","secondary":"#059669","tertiary":"#f1f5f9"},"dark":{"background":"#0c0d0e","surface":"#141517","border":"#26272b","text":"#f4f4f5","muted":"#a1a1aa","accent":"#0284c7","secondary":"#10b981","tertiary":"#1c1d20"},"fontFamily":"system","radius":"large","spacing":"comfortable"},"content":{},"variables":[]},"usage":"link"}'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "valid": true, "config": { "schemaVersion": 1, "kind": "preset", "baseTemplateId": "android", "rendererContractVersion": 1, "appearance": { "light": { "background": "#f8fafc", "surface": "#ffffff", "border": "#e2e8f0", "text": "#0f172a", "muted": "#64748b", "accent": "#0284c7", "secondary": "#059669", "tertiary": "#f1f5f9" }, "dark": { "background": "#0c0d0e", "surface": "#141517", "border": "#26272b", "text": "#f4f4f5", "muted": "#a1a1aa", "accent": "#0284c7", "secondary": "#10b981", "tertiary": "#1c1d20" }, "fontFamily": "system", "radius": "large", "spacing": "comfortable" }, "content": {}, "variables": [] }, "usage": "link" }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 409, 413, 415, 422, 429, 500, 503. Veja códigos e repetição.
POST /templates/{templateId}/preview
Seção intitulada “POST /templates/{templateId}/preview”Prévia com dados autorizados, sem publicação.
Permissão: templates:preview. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
templateId |
path | sim | OpaqueId |
Idempotency-Key |
header | sim | UUID v4 por intenção. Recibo por 24h. Mudança de payload/precondição retorna 409. Segredo de chave não é reexibido. |
Corpo: application/json. Campos desconhecidos são rejeitados.
| Campo | Tipo | Obrigatório | Restrição |
|---|---|---|---|
config |
TemplateConfig | não | Consulte o schema para restrições e campos internos |
linkId |
LinkId | não | Consulte o schema para restrições e campos internos |
templateData |
object | não | Consulte o schema para restrições e campos internos |
{ "config": { "schemaVersion": 1, "kind": "preset", "baseTemplateId": "android", "rendererContractVersion": 1, "appearance": { "light": { "background": "#f8fafc", "surface": "#ffffff", "border": "#e2e8f0", "text": "#0f172a", "muted": "#64748b", "accent": "#0284c7", "secondary": "#059669", "tertiary": "#f1f5f9" }, "dark": { "background": "#0c0d0e", "surface": "#141517", "border": "#26272b", "text": "#f4f4f5", "muted": "#a1a1aa", "accent": "#0284c7", "secondary": "#10b981", "tertiary": "#1c1d20" }, "fontFamily": "system", "radius": "large", "spacing": "comfortable" }, "content": {}, "variables": [] }}Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request POST 'https://api.staging.agilink.io/v1/templates/60000000-0000-4000-8000-000000000001/preview' \ --header 'Authorization: Bearer <credencial>' \ --header 'Idempotency-Key: 10000000-0000-4000-8000-000000000001' \ --header 'Content-Type: application/json' \ --data '{"config":{"schemaVersion":1,"kind":"preset","baseTemplateId":"android","rendererContractVersion":1,"appearance":{"light":{"background":"#f8fafc","surface":"#ffffff","border":"#e2e8f0","text":"#0f172a","muted":"#64748b","accent":"#0284c7","secondary":"#059669","tertiary":"#f1f5f9"},"dark":{"background":"#0c0d0e","surface":"#141517","border":"#26272b","text":"#f4f4f5","muted":"#a1a1aa","accent":"#0284c7","secondary":"#10b981","tertiary":"#1c1d20"},"fontFamily":"system","radius":"large","spacing":"comfortable"},"content":{},"variables":[]}}'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "templateId": "60000000-0000-4000-8000-000000000001", "config": { "schemaVersion": 1, "kind": "preset", "baseTemplateId": "android", "rendererContractVersion": 1, "appearance": { "light": { "background": "#f8fafc", "surface": "#ffffff", "border": "#e2e8f0", "text": "#0f172a", "muted": "#64748b", "accent": "#0284c7", "secondary": "#059669", "tertiary": "#f1f5f9" }, "dark": { "background": "#0c0d0e", "surface": "#141517", "border": "#26272b", "text": "#f4f4f5", "muted": "#a1a1aa", "accent": "#0284c7", "secondary": "#10b981", "tertiary": "#1c1d20" }, "fontFamily": "system", "radius": "large", "spacing": "comfortable" }, "content": {}, "variables": [] }, "content": { "heading": "Loja" }, "sideEffects": false, "rendererContractVersion": 1 }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 409, 413, 415, 422, 429, 500, 503. Veja códigos e repetição.
GET /templates/{templateId}/versions
Seção intitulada “GET /templates/{templateId}/versions”Listar/preparar snapshots imutáveis.
Permissão: templates:read. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
templateId |
path | sim | OpaqueId |
limit |
query | não | integer |
cursor |
query | não | Cursor |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request GET 'https://api.staging.agilink.io/v1/templates/60000000-0000-4000-8000-000000000001/versions' \ --header 'Authorization: Bearer <credencial>'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
{ "data": [ { "templateId": "60000000-0000-4000-8000-000000000001", "version": 1, "state": "prepared", "config": { "schemaVersion": 1, "kind": "preset", "baseTemplateId": "android", "rendererContractVersion": 1, "appearance": { "light": { "background": "#f8fafc", "surface": "#ffffff", "border": "#e2e8f0", "text": "#0f172a", "muted": "#64748b", "accent": "#0284c7", "secondary": "#059669", "tertiary": "#f1f5f9" }, "dark": { "background": "#0c0d0e", "surface": "#141517", "border": "#26272b", "text": "#f4f4f5", "muted": "#a1a1aa", "accent": "#0284c7", "secondary": "#10b981", "tertiary": "#1c1d20" }, "fontFamily": "system", "radius": "large", "spacing": "comfortable" }, "content": {}, "variables": [] }, "checksum": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "usage": "link", "authorId": "40000000-0000-4000-8000-000000000001", "createdAt": "2026-10-19T20:00:00Z" } ], "pagination": { "hasMore": false, "nextCursor": null }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 422, 429, 500, 503. Veja códigos e repetição.
POST /templates/{templateId}/versions
Seção intitulada “POST /templates/{templateId}/versions”Listar/preparar snapshots imutáveis.
Permissão: templates:snapshot. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
templateId |
path | sim | OpaqueId |
Idempotency-Key |
header | sim | UUID v4 por intenção. Recibo por 24h. Mudança de payload/precondição retorna 409. Segredo de chave não é reexibido. |
If-Match |
header | sim | ETag forte obtido em consulta. Ausência 428; revisão antiga 412. |
Corpo: application/json. Campos desconhecidos são rejeitados.
| Campo | Tipo | Obrigatório | Restrição |
|---|---|---|---|
draftRevision |
Revision | sim | Consulte o schema para restrições e campos internos |
usage |
— | não | Valores: link, default |
{ "draftRevision": "20000000-0000-4000-8000-000000000001", "usage": "link"}Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request POST 'https://api.staging.agilink.io/v1/templates/60000000-0000-4000-8000-000000000001/versions' \ --header 'Authorization: Bearer <credencial>' \ --header 'Idempotency-Key: 10000000-0000-4000-8000-000000000001' \ --header 'If-Match: "20000000-0000-4000-8000-000000000001"' \ --header 'Content-Type: application/json' \ --data '{"draftRevision":"20000000-0000-4000-8000-000000000001","usage":"link"}'Resposta: 201. Criado. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
Location |
Endereço relativo do recurso criado. | /v1/templates/60000000-0000-4000-8000-000000000001/versions/1 |
{ "data": { "template": { "id": "60000000-0000-4000-8000-000000000001", "appId": "app_loja", "name": "Página da loja", "baseTemplateId": "android", "archived": false, "revision": "20000000-0000-4000-8000-000000000001", "createdAt": "2026-10-19T20:00:00Z", "updatedAt": "2026-10-19T20:00:00Z" }, "version": { "templateId": "60000000-0000-4000-8000-000000000001", "version": 1, "state": "prepared", "config": { "schemaVersion": 1, "kind": "preset", "baseTemplateId": "android", "rendererContractVersion": 1, "appearance": { "light": { "background": "#f8fafc", "surface": "#ffffff", "border": "#e2e8f0", "text": "#0f172a", "muted": "#64748b", "accent": "#0284c7", "secondary": "#059669", "tertiary": "#f1f5f9" }, "dark": { "background": "#0c0d0e", "surface": "#141517", "border": "#26272b", "text": "#f4f4f5", "muted": "#a1a1aa", "accent": "#0284c7", "secondary": "#10b981", "tertiary": "#1c1d20" }, "fontFamily": "system", "radius": "large", "spacing": "comfortable" }, "content": {}, "variables": [] }, "checksum": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "usage": "link", "authorId": "40000000-0000-4000-8000-000000000001", "createdAt": "2026-10-19T20:00:00Z" }, "draft": { "revision": "20000000-0000-4000-8000-000000000001", "baseVersion": 1, "updatedAt": "2026-10-19T20:00:00Z" }, "revision": "20000000-0000-4000-8000-000000000001" }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 409, 412, 413, 415, 422, 428, 429, 500, 503. Veja códigos e repetição.
GET /templates/{templateId}/versions/{version}
Seção intitulada “GET /templates/{templateId}/versions/{version}”Consultar snapshot.
Permissão: templates:read. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
templateId |
path | sim | OpaqueId |
version |
path | sim | OpaqueId |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request GET 'https://api.staging.agilink.io/v1/templates/60000000-0000-4000-8000-000000000001/versions/1' \ --header 'Authorization: Bearer <credencial>'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "templateId": "60000000-0000-4000-8000-000000000001", "version": 1, "state": "prepared", "config": { "schemaVersion": 1, "kind": "preset", "baseTemplateId": "android", "rendererContractVersion": 1, "appearance": { "light": { "background": "#f8fafc", "surface": "#ffffff", "border": "#e2e8f0", "text": "#0f172a", "muted": "#64748b", "accent": "#0284c7", "secondary": "#059669", "tertiary": "#f1f5f9" }, "dark": { "background": "#0c0d0e", "surface": "#141517", "border": "#26272b", "text": "#f4f4f5", "muted": "#a1a1aa", "accent": "#0284c7", "secondary": "#10b981", "tertiary": "#1c1d20" }, "fontFamily": "system", "radius": "large", "spacing": "comfortable" }, "content": {}, "variables": [] }, "checksum": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "usage": "link", "authorId": "40000000-0000-4000-8000-000000000001", "createdAt": "2026-10-19T20:00:00Z" }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 422, 429, 500, 503. Veja códigos e repetição.
GET /templates/{templateId}/availability
Seção intitulada “GET /templates/{templateId}/availability”Versões disponíveis para associação.
Permissão: templates:read. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
templateId |
path | sim | OpaqueId |
limit |
query | não | integer |
cursor |
query | não | Cursor |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request GET 'https://api.staging.agilink.io/v1/templates/60000000-0000-4000-8000-000000000001/availability' \ --header 'Authorization: Bearer <credencial>'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
{ "data": [ { "version": 1, "confirmedAt": "2026-10-19T20:00:00Z" } ], "pagination": { "hasMore": false, "nextCursor": null }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 422, 429, 500, 503. Veja códigos e repetição.
POST /templates/{templateId}/publish
Seção intitulada “POST /templates/{templateId}/publish”Publicar versão com alvos explícitos.
Permissão: templates:publish. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
templateId |
path | sim | OpaqueId |
Idempotency-Key |
header | sim | UUID v4 por intenção. Recibo por 24h. Mudança de payload/precondição retorna 409. Segredo de chave não é reexibido. |
If-Match |
header | sim | ETag forte obtido em consulta. Ausência 428; revisão antiga 412. |
Corpo: application/json. Campos desconhecidos são rejeitados.
| Campo | Tipo | Obrigatório | Restrição |
|---|---|---|---|
version |
integer | não | Consulte o schema para restrições e campos internos |
draftRevision |
Revision | não | Consulte o schema para restrições e campos internos |
usage |
— | não | Valores: link, default |
targets |
array | sim | Consulte o schema para restrições e campos internos |
{ "version": 1, "targets": []}Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request POST 'https://api.staging.agilink.io/v1/templates/60000000-0000-4000-8000-000000000001/publish' \ --header 'Authorization: Bearer <credencial>' \ --header 'Idempotency-Key: 10000000-0000-4000-8000-000000000001' \ --header 'If-Match: "20000000-0000-4000-8000-000000000001"' \ --header 'Content-Type: application/json' \ --data '{"version":1,"targets":[]}'Resposta: 202. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
Location |
Publicação a acompanhar. | /v1/template-publications/60000000-0000-4000-8000-000000000001 |
Retry-After |
Segundos até a próxima consulta. | 1 |
{ "data": { "id": "60000000-0000-4000-8000-000000000001", "appId": "app_loja", "revision": "20000000-0000-4000-8000-000000000001", "action": "publish", "baseTemplateId": "android", "choice": { "mode": "custom", "templateId": "60000000-0000-4000-8000-000000000001", "version": 1 }, "state": "queued", "phase": "version", "error": null, "versionAvailability": "prepared", "createdAt": "2026-10-19T20:00:00Z", "updatedAt": "2026-10-19T20:00:00Z", "targets": [] }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 409, 412, 413, 415, 422, 428, 429, 500, 503. Veja códigos e repetição.
POST /templates/{templateId}/restore
Seção intitulada “POST /templates/{templateId}/restore”Restaurar versão confirmada.
Permissão: templates:publish. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
templateId |
path | sim | OpaqueId |
Idempotency-Key |
header | sim | UUID v4 por intenção. Recibo por 24h. Mudança de payload/precondição retorna 409. Segredo de chave não é reexibido. |
If-Match |
header | sim | ETag forte obtido em consulta. Ausência 428; revisão antiga 412. |
Corpo: application/json. Campos desconhecidos são rejeitados.
| Campo | Tipo | Obrigatório | Restrição |
|---|---|---|---|
version |
integer | não | Consulte o schema para restrições e campos internos |
mode |
— | não | Valores: official, inherit |
targets |
array | sim | Consulte o schema para restrições e campos internos |
{ "version": 1, "targets": []}Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request POST 'https://api.staging.agilink.io/v1/templates/60000000-0000-4000-8000-000000000001/restore' \ --header 'Authorization: Bearer <credencial>' \ --header 'Idempotency-Key: 10000000-0000-4000-8000-000000000001' \ --header 'If-Match: "20000000-0000-4000-8000-000000000001"' \ --header 'Content-Type: application/json' \ --data '{"version":1,"targets":[]}'Resposta: 202. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
Location |
Publicação a acompanhar. | /v1/template-publications/60000000-0000-4000-8000-000000000001 |
Retry-After |
Segundos até a próxima consulta. | 1 |
{ "data": { "id": "60000000-0000-4000-8000-000000000001", "appId": "app_loja", "revision": "20000000-0000-4000-8000-000000000001", "action": "publish", "baseTemplateId": "android", "choice": { "mode": "custom", "templateId": "60000000-0000-4000-8000-000000000001", "version": 1 }, "state": "queued", "phase": "version", "error": null, "versionAvailability": "prepared", "createdAt": "2026-10-19T20:00:00Z", "updatedAt": "2026-10-19T20:00:00Z", "targets": [] }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 409, 412, 413, 415, 422, 428, 429, 500, 503. Veja códigos e repetição.
GET /template-publications
Seção intitulada “GET /template-publications”Listar publicações por app/template/alvo.
Permissão: templates:read. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
appId |
query | sim | AppId |
limit |
query | não | integer |
cursor |
query | não | Cursor |
baseTemplateId |
query | não | BaseId |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request GET 'https://api.staging.agilink.io/v1/template-publications?appId=app_loja' \ --header 'Authorization: Bearer <credencial>'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
{ "data": [ { "id": "60000000-0000-4000-8000-000000000001", "appId": "app_loja", "revision": "20000000-0000-4000-8000-000000000001", "action": "publish", "baseTemplateId": "android", "choice": { "mode": "custom", "templateId": "60000000-0000-4000-8000-000000000001", "version": 1 }, "state": "queued", "phase": "version", "error": null, "versionAvailability": "prepared", "createdAt": "2026-10-19T20:00:00Z", "updatedAt": "2026-10-19T20:00:00Z", "targets": [] } ], "pagination": { "hasMore": false, "nextCursor": null }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 422, 429, 500, 503. Veja códigos e repetição.
GET /template-publications/{publicationId}
Seção intitulada “GET /template-publications/{publicationId}”Estado detalhado por destino.
Permissão: templates:read. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
publicationId |
path | sim | OpaqueId |
Sem corpo de requisição.
Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request GET 'https://api.staging.agilink.io/v1/template-publications/70000000-0000-4000-8000-000000000001' \ --header 'Authorization: Bearer <credencial>'Resposta: 200. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
{ "data": { "id": "60000000-0000-4000-8000-000000000001", "appId": "app_loja", "revision": "20000000-0000-4000-8000-000000000001", "action": "publish", "baseTemplateId": "android", "choice": { "mode": "custom", "templateId": "60000000-0000-4000-8000-000000000001", "version": 1 }, "state": "queued", "phase": "version", "error": null, "versionAvailability": "prepared", "createdAt": "2026-10-19T20:00:00Z", "updatedAt": "2026-10-19T20:00:00Z", "targets": [] }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 422, 429, 500, 503. Veja códigos e repetição.
POST /template-publications/{publicationId}/retry
Seção intitulada “POST /template-publications/{publicationId}/retry”Repetir tentativa recuperável.
Permissão: templates:retry. Credencial: sessão humana ou chave de API com acesso ao aplicativo.
| Parâmetro | Local | Obrigatório | Significado |
|---|---|---|---|
publicationId |
path | sim | OpaqueId |
Idempotency-Key |
header | sim | UUID v4 por intenção. Recibo por 24h. Mudança de payload/precondição retorna 409. Segredo de chave não é reexibido. |
If-Match |
header | sim | ETag forte obtido em consulta. Ausência 428; revisão antiga 412. |
Corpo: application/json. Campos desconhecidos são rejeitados.
| Campo | Tipo | Obrigatório | Restrição |
|---|
{}Exemplo completo de requisição (substitua os identificadores fictícios):
curl --request POST 'https://api.staging.agilink.io/v1/template-publications/70000000-0000-4000-8000-000000000001/retry' \ --header 'Authorization: Bearer <credencial>' \ --header 'Idempotency-Key: 10000000-0000-4000-8000-000000000001' \ --header 'If-Match: "20000000-0000-4000-8000-000000000001"' \ --header 'Content-Type: application/json' \ --data '{}'Resposta: 202. Sucesso. Exemplo fictício.
| Header | Significado | Exemplo |
|---|---|---|
X-Request-Id |
Identificador gerado pelo servidor, inclusive para falhas e replays. | — |
Cache-Control |
Respostas administrativas não podem ser armazenadas. | no-store, no-transform |
ETag |
Revisão forte, a enviar em If-Match na alteração. | “20000000-0000-4000-8000-000000000001” |
Location |
Publicação a acompanhar. | /v1/template-publications/60000000-0000-4000-8000-000000000001 |
Retry-After |
Segundos até a próxima consulta. | 1 |
{ "data": { "id": "60000000-0000-4000-8000-000000000001", "appId": "app_loja", "revision": "20000000-0000-4000-8000-000000000001", "action": "publish", "baseTemplateId": "android", "choice": { "mode": "custom", "templateId": "60000000-0000-4000-8000-000000000001", "version": 1 }, "state": "queued", "phase": "version", "error": null, "versionAvailability": "prepared", "createdAt": "2026-10-19T20:00:00Z", "updatedAt": "2026-10-19T20:00:00Z", "targets": [] }, "meta": { "requestId": "req_00000000000040008000000000000001" }}Erros previstos: 400, 401, 403, 404, 409, 412, 413, 415, 422, 428, 429, 500, 503. Veja códigos e repetição.