# Subdomínio gerado

- Serviço com `visibility: "public"` é servido em `https://<slug>.<APPS_DOMAIN>` (o domínio de apps da plataforma; use sempre a URL que a API devolve, e a variável `PUBLIC_URL` dentro do grupo).
- Serviço com `visibility: "private"` **não recebe slug nem rota pública**: só é alcançado pelo `name` dentro do grupo ([Rede privada](/conectados/rede-privada/)).
- O `slug` é único na plataforma. Projetos antigos migrados mantêm o slug que já tinham, no serviço `web`.
- O HTTPS é emitido no primeiro acesso.

## Criar um serviço público com slug

```bash
SUF=$(date +%s)-$RANDOM
P=$(curl -sS -X POST "$NEBULAR_API/v1/projects" \
  -H "Authorization: Bearer $NEBULAR_TOKEN" -H "Content-Type: application/json" \
  -H "Idempotency-Key: sub-proj-$SUF" \
  -d "{\"name\": \"demo-sub-$SUF\"}" | jq -r '.id')

curl -sS -X PATCH "$NEBULAR_API/v1/projects/$P/services/web" \
  -H "Authorization: Bearer $NEBULAR_TOKEN" -H "Content-Type: application/json" \
  -d "{\"visibility\": \"public\", \"slug\": \"demo-sub-$SUF\", \"source\": {\"type\": \"image\", \"ref\": \"ghcr.io/org/app:1.2\"}}"
```
```json
{"id": "01j9zktv26djn3k6dd2yraqsbt", "name": "web", "kind": "app", "visibility": "public"}
```

## Se algo falhar

| Resposta | O que fazer |
|---|---|
| `409 slug_taken` | Slug já em uso. Escolha outro e repita com uma `Idempotency-Key` nova. |
| `400 invalid_request` | `slug` malformado, ou `slug` informado num serviço `private` (privado não tem slug). |
| `404 not_found` | Projeto inexistente ou de outro time. |

Quer um nome próprio? Veja [Domínio próprio](/dominios/dominio-proprio/). Tabela completa: [Erros](/erros/tabela/).
