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

# Instruções de Integração da API Midjourney Edits

> Midjourney generation 集成指南 - XHuoAPI

Este documento apresentará uma descrição da integração da API Midjourney Edits, que permite editar imagens enviadas por meio de palavras-chave.

## Processo de Solicitação

Para usar a API, você precisa primeiro acessar a página correspondente da [API Midjourney Edits](https://api.xhuoapi.ai/documents/midjourney-edits) para solicitar o serviço correspondente. Após entrar na página, clique no botão "Acquire", conforme mostrado na imagem:

![](https://cdn.xhuoapi.ai/q6ytrc.png)

Se você ainda não estiver logado ou registrado, será redirecionado automaticamente para a página de login, convidando-o a se registrar e fazer login. Após o registro e login, você será redirecionado de volta para a página atual.

Na primeira solicitação, haverá um crédito gratuito disponível, permitindo o uso gratuito da API.

## Uso Básico

Primeiro, entenda a forma básica de uso, que envolve a entrada de palavras-chave `prompt`, a ação de geração `action` e a imagem de referência `image_url`, para obter o resultado processado. Primeiro, é necessário passar um campo `action`, cujo valor é `generate`, com o conteúdo específico a seguir:

<p>
  <img src="https://cdn.xhuoapi.ai/m44i6n.png" width="500" className="m-auto" />
</p>

Aqui, podemos ver que configuramos os Headers da Requisição, incluindo:

* `accept`: o formato de resposta desejado, que deve ser preenchido como `application/json`, ou seja, formato JSON.
* `authorization`: a chave para chamar a API, que pode ser selecionada diretamente após a solicitação.

Além disso, configuramos o Corpo da Requisição, incluindo:

* `mask`: pode especificar a posição da máscara da área da imagem para edição e regeneração.
* `split_images`: divide a imagem gerada em várias imagens, retornando através do campo sub\_image\_urls. Por padrão, é false.
* `action`: a ação da tarefa de geração de imagem, que por padrão é `generate`.
* `image_url`: o link da imagem a ser editada.
* `prompt`: palavras-chave.
* `mode`: modo de geração, podendo ser `fast`/`relax`/`turbo`.
* `callback_url`: a URL para onde os resultados devem ser retornados.

Após a seleção, você pode notar que o código correspondente também foi gerado à direita, conforme mostrado na imagem:

<p>
  <img src="https://cdn.xhuoapi.ai/9wed3b.png" width="500" className="m-auto" />
</p>

Clique no botão "Try" para realizar o teste, como mostrado na imagem acima, e você obterá o seguinte resultado:

```json theme={null}
{
  "sub_image_urls": [
    "https://cdn.midjourney.com/88e16dab-ef48-43a5-af73-bf24065287bc/0_0.png",
    "https://cdn.midjourney.com/88e16dab-ef48-43a5-af73-bf24065287bc/0_1.png",
    "https://cdn.midjourney.com/88e16dab-ef48-43a5-af73-bf24065287bc/0_2.png",
    "https://cdn.midjourney.com/88e16dab-ef48-43a5-af73-bf24065287bc/0_3.png"
  ],
  "image_url": "https://storage.fonedis.cc/attachments/1372468820912115716/1391371957878132849/cat_sitting_table_88e16dab-ef48-43a5-af73-bf24065287bc.png?ex=686ba79d&is=686a561d&hm=ad005d06f6673d6152456e04c3cbec39d062bd9df10448623fae27ddaf8b8a80&",
  "image_width": 960,
  "image_height": 1200,
  "raw_image_url": "https://storage.fonedis.cc/attachments/1372468820912115716/1391371957878132849/cat_sitting_table_88e16dab-ef48-43a5-af73-bf24065287bc.png?ex=686ba79d&is=686a561d&hm=ad005d06f6673d6152456e04c3cbec39d062bd9df10448623fae27ddaf8b8a80&",
  "raw_image_width": 960,
  "raw_image_height": 1200,
  "progress": 100,
  "image_id": "1391372193836826624",
  "task_id": "26c39859-f54a-4998-9e42-3da96eceee8c",
  "success": true
}
```

O resultado retornado contém vários campos, descritos a seguir:

* `success`: o estado da tarefa de edição de imagem.
* `task_id`: o ID da tarefa de edição de imagem.
* `image_id`: o ID da imagem da tarefa de edição.
* `sub_image_urls`: os múltiplos resultados da tarefa de geração de imagem.
* `image_url`: o link da imagem gerada.
* `image_width`: a largura da imagem gerada.
* `image_height`: a altura da imagem gerada.
* `progress`: o campo de progresso da tarefa de edição de imagem.

Podemos ver que obtivemos informações satisfatórias sobre a imagem, e tudo o que precisamos fazer é acessar o link da imagem gerada no campo `image_url`.

Além disso, se você quiser gerar o código correspondente para a integração, pode copiá-lo diretamente, como o código CURL a seguir:

```shell theme={null}
curl -X POST 'https://api.xhuoapi.ai/v1/midjourney/edits' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "prompt": "A cat sitting on a table",
  "split_images": true,
  "image_url": "https://cdn.xhuoapi.ai/jgo1cw.jpg",
  "action": "generate"
}'
```

## Callback Assíncrono

Como o tempo de geração da API Midjourney Edits é relativamente longo, cerca de 1-2 minutos, se a API não responder por um longo período, a requisição HTTP manterá a conexão, resultando em consumo adicional de recursos do sistema. Portanto, esta API também oferece suporte a callbacks assíncronos.

O fluxo geral é: quando o cliente inicia a solicitação, deve especificar um campo `callback_url` adicional. Após o cliente fazer a solicitação à API, a API retornará imediatamente um resultado, contendo um campo `task_id`, que representa o ID da tarefa atual. Quando a tarefa for concluída, o resultado da geração será enviado ao `callback_url` especificado pelo cliente em formato JSON POST, incluindo também o campo `task_id`, permitindo que o resultado da tarefa seja associado pelo ID.

A seguir, vamos entender como operar isso por meio de um exemplo.

Primeiro, o callback Webhook é um serviço que pode receber requisições HTTP, e o desenvolvedor deve substituí-lo pela URL do servidor HTTP que ele configurou. Para facilitar a demonstração, usaremos um site público de exemplo de Webhook, [https://webhook.site/](https://webhook.site/), onde você pode abrir o site e obter uma URL de Webhook, conforme mostrado na imagem:

![](https://cdn.xhuoapi.ai/hfrbzw.png)

Copie esta URL para usá-la como Webhook, sendo o exemplo `https://webhook.site/556e6971-b41f-4fa8-9151-6e91acd0399f`.

Em seguida, podemos definir o campo `callback_url` como a URL do Webhook acima, ao mesmo tempo que preenchemos os parâmetros correspondentes, conforme mostrado na imagem:

<p>
  <img src="https://cdn.xhuoapi.ai/q3fnhv.png" width="500" className="m-auto" />
</p>

Clique em executar e você verá que receberá imediatamente um resultado, como abaixo:

```
{
  "task_id": "b8b7fdc2-628e-40dd-bc0c-671c3ddac9e9"
}
```

Após alguns instantes, você poderá observar o resultado da geração no `https://webhook.site/556e6971-b41f-4fa8-9151-6e91acd0399f`, conforme mostrado na imagem:

<p>
  <img src="https://cdn.xhuoapi.ai/t8cupr.png" width="500" className="m-auto" />
</p>

O conteúdo é o seguinte:

```json theme={null}
{
    "sub_image_urls": [
        "https://cdn.midjourney.com/f3638ed2-60f6-49dd-897a-6d68c15afb17/0_0.png",
        "https://cdn.midjourney.com/f3638ed2-60f6-49dd-897a-6d68c15afb17/0_1.png",
        "https://cdn.midjourney.com/f3638ed2-60f6-49dd-897a-6d68c15afb17/0_2.png",
        "https://cdn.midjourney.com/f3638ed2-60f6-49dd-897a-6d68c15afb17/0_3.png"
    ],
    "image_url": "https://storage.fonedis.cc/attachments/1372468820912115716/1391374307719905340/cat_sitting_table_f3638ed2-60f6-49dd-897a-6d68c15afb17.png?ex=686ba9cd&is=686a584d&hm=71543c21c38db8a50c7ebcf54bc5208ec349e8592ec9e332f778f74167000ced&",
    "image_width": 960,
    "image_height": 1200,
    "raw_image_url": "https://storage.fonedis.cc/attachments/1372468820912115716/1391374307719905340/cat_sitting_table_f3638ed2-60f6-49dd-897a-6d68c15afb17.png?ex=686ba9cd&is=686a584d&hm=71543c21c38db8a50c7ebcf54bc5208ec349e8592ec9e332f778f74167000ced&",
    "raw_image_width": 960,
    "raw_image_height": 1200,
    "progress": 100,
    "image_id": "1391374390892953600",
    "task_id": "b8b7fdc2-628e-40dd-bc0c-671c3ddac9e9",
    "success": true
}
```

Pode-se ver que no resultado há um campo `task_id`, os outros campos são semelhantes aos mencionados anteriormente, através deste campo é possível realizar a associação da tarefa.

## Tratamento de Erros

Ao chamar a API, se encontrar um erro, a API retornará o respectivo código de erro e informações. Por exemplo:

* `400 token_mismatched`: Solicitação inválida, possivelmente devido a parâmetros ausentes ou inválidos.
* `400 api_not_implemented`: Solicitação inválida, possivelmente devido a parâmetros ausentes ou inválidos.
* `401 invalid_token`: Não autorizado, token de autorização inválido ou ausente.
* `429 too_many_requests`: Muitas solicitações, você excedeu o limite de taxa.
* `500 api_error`: Erro interno do servidor, algo deu errado no servidor.

### Exemplo de Resposta de Erro

```json theme={null}
{
  "success": false,
  "error": {
    "code": "api_error",
    "message": "fetch failed"
  },
  "trace_id": "2cf86e86-22a4-46e1-ac2f-032c0f2a4e89"
}
```

## Conclusão

Através deste documento, você já entendeu como usar a API Midjourney Edits para editar imagens através da entrada de palavras-chave. Esperamos que este documento possa ajudá-lo a integrar e usar melhor essa API. Se tiver alguma dúvida, entre em contato com nossa equipe de suporte técnico.
