> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# Parceiros no Flowker

> Restrinja a credencial de um parceiro no Flowker aos workflows que você escolher, diga a ele como nomear esses workflows e leia as recusas que ele recebe.

Um [parceiro](https://docs.lerian.studio/pt/platform/access-manager/features/partners/overview) pode chamar o Flowker com uma credencial própria. No Flowker, você restringe essa credencial a alguns workflows. Esta página mostra como escolher esse escopo, o que ele alcança e o que o parceiro recebe quando sai dele.

Todo parceiro do Flowker precisa de escopo.

## Passo a passo

***

**1. Escolha os workflows do parceiro**

O Flowker tem uma restrição. O **campo na API** é o `field` de uma entrada de escopo; o Console mostra o nome da primeira coluna.

| Restrição | Campo na API | O que o parceiro alcança | O que é recusado |
| - | - | - | - |
| **Workflow** (um ou mais valores) | `workflowId` | Os workflows listados: lê-los, alterá-los, cloná-los, ativá-los, desativá-los, voltá-los para rascunho, excluí-los, ler e operar o agendamento deles, executá-los, e ler as execuções e os resultados deles. Tudo dentro do que as permissões dele dão. | Os outros workflows, listar ou criar workflows, ler uma execução por uma rota que não nomeia o workflow, e o catálogo, os executores, as configurações de provedor, os dashboards, os schemas e os webhooks. |

O catálogo de escopo lista a restrição do Flowker. Leia-o com [Consultar o catálogo de escopo de um produto](https://docs.lerian.studio/pt/reference/platform/access-manager/retrieve-a-product-s-scope-catalog.md) para `flowker`.

Algumas regras valem para todo escopo:

* Uma requisição que não nomeia um workflow é recusada. Por exemplo, um parceiro não pode listar as execuções sem filtrar pelo workflow dele.
* Uma requisição que lista vários workflows numa query é recusada quando qualquer um deles está fora do escopo.

**2. Dê ao parceiro as permissões e o escopo**

Crie o parceiro, ou altere-o, no [Console](https://docs.lerian.studio/pt/platform/access-manager/features/partners/console.md) ou com a [API do Identity](https://docs.lerian.studio/pt/platform/access-manager/features/partners/api.md). O identificador do produto é `flowker`.

* Adicione a entrada de escopo `workflowId`, com um ou mais workflows. Sem ela, o Access Manager recusa o parceiro com `400` e `IDE-1060`.
* Marque os recursos e as ações. O máximo que você pode dar é o que o papel `flowker-editor-role` tem no seu tenant. Acima disso, o Access Manager recusa com `IDE-1043`. Por exemplo, `catalog` com `create` está acima desse papel.

Um parceiro só recebe as permissões que atuam sobre um workflow:

| Recurso | Ações |
| - | - |
| `workflows` | `read`, `update`, `clone`, `activate`, `deactivate`, `draft`, `delete` |
| `executions` | `read`, `list`, `create` |

Toda outra permissão do Flowker atua sobre o tenant inteiro, e nunca é dada a um parceiro, nem as de leitura, como `workflows` com `list` ou `executors` com `read`. O Access Manager recusa com `400` e `IDE-1056`.

**3. Crie a aplicação dele no Flowker**

Crie a aplicação do parceiro com o produto `flowker`. Veja [Criar as aplicações do parceiro](https://docs.lerian.studio/pt/platform/access-manager/features/partners/api.md#create-the-partners-applications) no guia da API, ou [no Console](https://docs.lerian.studio/pt/platform/access-manager/features/partners/console.md#create-the-partners-applications). Envie o client ID e o client secret ao parceiro por um canal seguro.

**4. Diga ao parceiro como nomear os workflows dele**

Em quase todas as rotas que o parceiro alcança, o workflow já está no path, em `/v1/workflows/{workflowId}`, então ele não envia nada extra. Só a lista de execuções nomeia o workflow numa query. Todo valor tem que estar dentro do escopo do parceiro.

| Rotas | Escritas | Leituras e rotas por ID |
| - | - | - |
| Workflows: `/v1/workflows/{workflowId}`, `…/clone`, `…/activate`, `…/deactivate`, `…/draft` | Path `workflowId` para alterar, excluir, clonar, ativar, desativar ou voltar para rascunho | Path `workflowId` |
| Agendamento: `/v1/workflows/{workflowId}/schedule/…` | Path `workflowId` para descartar as ocorrências perdidas (`missed/discard-all`), e `workflowId` com `occurrenceId` para executar ou descartar uma (`missed/{occurrenceId}/run`, `missed/{occurrenceId}/discard`) | Path `workflowId` para `upcoming`, `missed` e `skipped` |
| Execuções de um workflow: `/v1/workflows/{workflowId}/executions`, `…/executions/{executionId}`, `…/executions/{executionId}/results` | Path `workflowId` para executar, com o header `Idempotency-Key` | Path `workflowId` e `executionId`, para o status e o resultado de uma execução |
| Lista de execuções: `GET /v1/executions` | Nenhuma: a rota só lê | Query `workflowId`, obrigatória para o parceiro. A resposta traz só as execuções desse workflow |

> [!WARNING]
>
> Para ler uma execução, use as rotas sob o workflow: `/v1/workflows/{workflowId}/executions/{executionId}` e `…/results`. As rotas `/v1/executions/{id}` e `/v1/executions/{id}/results` não nomeiam o workflow, e são recusadas a todo parceiro.

Uma execução de outro workflow, pedida sob o path de um workflow do parceiro, responde `404` com `FLK-0500`. Nada é lido, e a resposta não diz de qual workflow é a execução.

Uma `Idempotency-Key` já usada para executar outro workflow responde `409` com `FLK-0511`. Nada é executado, e a resposta não traz nada da outra execução. Uma chave nova executa o workflow, e a mesma chave repetida no mesmo workflow devolve a mesma execução.

Estas rotas não nomeiam um workflow, e são recusadas a todo parceiro: listar e criar workflows (`GET /v1/workflows`, `POST /v1/workflows`, `POST /v1/workflows/from-template`), `GET /v1/workflows/schedule/pending-review-counts`, `POST /v1/workflows/preview-request`, e as rotas do catálogo, dos executores, das configurações de provedor, dos dashboards, dos schemas e dos webhooks. Use uma aplicação da sua própria instituição para essas rotas.

**5. Confirme que funciona**

Esta conferência supõe que o parceiro tem o recurso `workflows` com a ação `read` no Flowker, e um escopo restrito a um ou mais workflows. Use a credencial do parceiro. Leia um workflow dentro do escopo dele. A resposta é `200`:

```bash theme={null}
FLOWKER_BASE_URL="https://your-flowker-host"             # your Flowker base URL
FLOWKER_BEARER_TOKEN="paste-the-partner-access-token-here"
WORKFLOW_ID="paste-a-workflow-id-in-the-scope-here"

curl -s -o /dev/null -w '%{http_code}\n' \
  -H "Authorization: Bearer ${FLOWKER_BEARER_TOKEN}" \
  "${FLOWKER_BASE_URL}/v1/workflows/${WORKFLOW_ID}"
```

Envie a mesma requisição com um workflow fora do escopo. A resposta é `403` com o código `FLK-0004`.

## Se algo falhar

***

| Código | Status | O que significa | O que fazer |
| - | - | - | - |
| `FLK-0004` | 403 | A requisição está fora das permissões ou fora do escopo do parceiro, ou não nomeia o workflow. | Confira se a requisição nomeia um workflow do escopo do parceiro, no path ou na query `workflowId`. Confira também se o parceiro tem a permissão dessa rota. |
| `FLK-0500` | 404 | A execução não existe sob o workflow que a requisição nomeia. | Confira o ID da execução e o workflow do path. |
| `FLK-0511` | 409 | A `Idempotency-Key` já foi usada para executar outro workflow. | Envie uma chave nova. |
| `FLK-0003` | 401 | O parceiro está suspenso, ou a requisição não traz um token válido. | Reative o parceiro, ou envie um token novo. |

A resposta não diz se foram as permissões ou o escopo que recusaram a requisição. Isso é proposital: um parceiro não consegue usar uma recusa para descobrir quais workflows existem fora do escopo dele.

Para todos os outros códigos, veja a [lista de erros do Flowker](https://docs.lerian.studio/pt/reference/products/flowker/flowker-error-list.md). Para as recusas ao criar ou alterar um parceiro, veja os [códigos de erro](https://docs.lerian.studio/pt/platform/access-manager/features/partners/api.md#error-codes) no guia da API.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.