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

# Kom i gang med Midjourney API

> Hurtigstart for Midjourney API på CometAPI: send inn /mj/submit/imagine, poll /mj/task/{id}/fetch, og bruk deretter /mj/submit/action og Modal-knapper.

## Forstå kjernekonseptet

MidJourney API-et **simulerer Discord-knappinteraksjoner**. I motsetning til typiske REST API-er fungerer det som en **tilstandsmaskin** der hver operasjon returnerer nye knapper for neste trinn.

### De fire kjerne-API-ene

| API                                                                                         | Formål                                                 | Når det skal brukes                            |
| ------------------------------------------------------------------------------------------- | ------------------------------------------------------ | ---------------------------------------------- |
| [`POST /mj/submit/imagine`](/no/api/image/midjourney/imagine)                               | Tekst-til-bilde-generering                             | Startpunkt for alle arbeidsflyter              |
| [`GET /mj/task/\{id\}/fetch`](/no/api/image/midjourney/task-fetching-api/fetch-single-task) | Spør etter oppgavestatus og hent knapper               | Etter hver innsending (poll til den er ferdig) |
| [`POST /mj/submit/action`](/no/api/image/midjourney/action)                                 | Klikk på en knapp (oppskalering, variasjon, zoom osv.) | Når du vil utføre en operasjon på et bilde     |
| [`POST /mj/submit/modal`](/no/api/image/midjourney/modal)                                   | Send inn ytterligere inndata                           | Bare når statusen er `MODAL`                   |

***

## Fullstendig diagram over arbeidsflyten

```
┌─────────────────────────────────────────────────────────────────────────────┐
│                         MIDJOURNEY API WORKFLOW                             │
└─────────────────────────────────────────────────────────────────────────────┘

  ┌──────────────────┐
  │  POST /submit/   │  ← Step 1: Submit prompt, get task_id
  │     imagine      │
  └────────┬─────────┘
           │ Returns: { "result": "task_id_1" }
           ▼
  ┌──────────────────┐
  │ GET /task/{id}/  │  ← Step 2: Poll until status = "SUCCESS"
  │      fetch       │
  └────────┬─────────┘
           │ Returns: imageUrl + buttons[] (U1,U2,U3,U4,V1,V2,V3,V4,🔄)
           ▼
  ┌──────────────────┐
  │  POST /submit/   │  ← Step 3: Click a button using customId
  │     action       │
  └────────┬─────────┘
           │ Returns: { "result": "task_id_2" }
           ▼
  ┌──────────────────┐
  │ GET /task/{id}/  │  ← Step 4: Poll the new task
  │      fetch       │
  └────────┬─────────┘
           │
           ├─── status = "SUCCESS" → Done! Get imageUrl
           │
           └─── status = "MODAL" → Need additional input (see Step 5)
                      │
                      ▼
           ┌──────────────────┐
           │  POST /submit/   │  ← Step 5: Submit mask/prompt for special operations
           │      modal       │
           └────────┬─────────┘
                    │ Returns: { "result": "task_id_3" }
                    ▼
           ┌──────────────────┐
           │ GET /task/{id}/  │  ← Step 6: Poll until SUCCESS
           │      fetch       │
           └──────────────────┘
```

***

## Viktig konsept: Knapper og customId

Hver vellykkede oppgave returnerer en `buttons`-array. Hver knapp har en `customId` som du bruker til å utløse neste handling.

**Eksempelrespons fra `/mj/task/\{id\}/fetch`:**

```json theme={null}
{
  "status": "SUCCESS",
  "imageUrl": "https://api.cometapi.com/mj/image/xxx",
  "buttons": [
    { "customId": "MJ::JOB::upsample::1::abc123", "label": "U1" },
    { "customId": "MJ::JOB::upsample::2::abc123", "label": "U2" },
    { "customId": "MJ::JOB::variation::1::abc123", "label": "V1" },
    { "customId": "MJ::JOB::reroll::0::abc123", "emoji": "🔄" }
  ]
}
```

<Warning>
  `customId` er ikke en fast verdi. Den endres for hver oppgave. Hent den alltid fra `buttons`-arrayen.
</Warning>

***

## Knappeoversikt etter trinn

### Etter IMAGINE (Etter IMAGINE ()

4-rutenettsbilde

| Knapp | customId-mønster                | Handling              | Resultat                     |
| ----- | ------------------------------- | --------------------- | ---------------------------- |
| U1-U4 | `MJ::JOB::upsample::1::xxx`     | Oppskaler enkeltbilde | Enkeltbilde i høy oppløsning |
| V1-V4 | `MJ::JOB::variation::1::xxx`    | Generer variasjoner   | Nytt 4-rutenett              |
| 🔄    | `MJ::JOB::reroll::0::xxx::SOLO` | Generer alle på nytt  | Nytt 4-rutenett              |

### Etter UPSCALE (Etter UPSCALE ()

enkeltbilde

| Etter oppskalering får du tilgang til redigeringsverktøy: | Etikett                          |
| --------------------------------------------------------- | -------------------------------- |
| Krever Modal?)                                            | Upscale (Subtle) / Upscale (2x   |
| ❌ Nei)                                                    | Upscale (Creative) / Upscale (4x |
| ❌ Nei) 🪄                                                 | Vary (Subtle                     |
| ❌ Nei) 🪄                                                 | Vary (Strong                     |
| ❌ Nei) 🖌️                                                | Vary (Region)                    |
| ✅ Ja (maske                                               | Zoom Out 2x / 1.5x 🔍            |
| ❌ Nei                                                     | Custom Zoom 🔍)                  |
| ✅ Ja (Prompt                                              | ⬅️➡️⬆️⬇️ Panorer                 |
| ❌ Nei                                                     | Animate 🎞️                      |
| ❌ Nei                                                     | 🔄 Kjør på nytt                  |

> **❌ Nei** Merk: Knappeetiketter og `customId`-formater kan variere avhengig av MJ-versjonen som er angitt i Prompt-en din (f.eks. `--v 6.1` kontra `--v 5.2`). Les alltid knappene fra API-responsen.

<Warning>
  Inpaint-knappen (Vary Region) vises bare etter Upscale.
</Warning>

***

## Fullstendig eksempel: Generer og oppskaler

### Trinn 1: Send inn imagine-forespørsel

```bash theme={null}
curl -X POST 'https://api.cometapi.com/mj/submit/imagine' \
  -H "Authorization: Bearer $COMETAPI_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "botType": "MID_JOURNEY",
    "prompt": "a cute cat --v 6.1",
    "accountFilter": { "modes": ["FAST"] }
  }'
```

**Respons:**

```json theme={null}
{ "code": 1, "result": "1768464763141701" }
```

### Trinn 2: Poll oppgavestatus

```bash theme={null}
curl -X GET 'https://api.cometapi.com/mj/task/1768464763141701/fetch' \
  -H "Authorization: Bearer $COMETAPI_KEY"
```

**Respons (når den er fullført):**

```json theme={null}
{
  "status": "SUCCESS",
  "imageUrl": "https://api.cometapi.com/mj/image/1768464763141701",
  "buttons": [
    { "customId": "MJ::JOB::upsample::1::5f20922e-xxx", "label": "U1" },
    { "customId": "MJ::JOB::upsample::2::5f20922e-xxx", "label": "U2" },
    ...
  ]
}
```

### Trinn 3: Klikk på U1 for å oppskalere

```bash theme={null}
curl -X POST 'https://api.cometapi.com/mj/submit/action' \
  -H "Authorization: Bearer $COMETAPI_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "taskId": "1768464763141701",
    "customId": "MJ::JOB::upsample::1::5f20922e-xxx"
  }'
```

**Respons:**

```json theme={null}
{ "code": 1, "result": "1768464800000000" }
```

### Trinn 4: Poll ny oppgave og hent resultatet

```bash theme={null}
curl -X GET 'https://api.cometapi.com/mj/task/1768464800000000/fetch' \
  -H "Authorization: Bearer $COMETAPI_KEY"
```

***

## Når kreves Modal?

Når du kaller [`/mj/submit/action`](/no/api/image/midjourney/action) og oppgavestatusen blir `MODAL` i stedet for `SUCCESS`, må du kalle [`/mj/submit/modal`](/no/api/image/midjourney/modal) for å oppgi ytterligere inndata.

### Bekreftede Modal-operasjoner

| Operasjon   | Knapp          | Hva som skal sendes inn                 |
| ----------- | -------------- | --------------------------------------- |
| Inpaint     | Vary (Region)  | `maskBase64` (PNG-maske) + `prompt`     |
| Custom Zoom | 🔍 Custom Zoom | `prompt` (f.eks. "din Prompt --zoom 2") |

**Eksempel: Inpaint-flyt**

Start Inpaint-handlingen:

```bash theme={null}
curl -X POST 'https://api.cometapi.com/mj/submit/action' \
  -H "Authorization: Bearer $COMETAPI_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"taskId": "<task_id>", "customId": "<custom_id>", "enableRemix": true}'
```

Spør etter den nye oppgaven én gang. Statusen `MODAL` betyr at oppgaven trenger masken og Prompt-en:

```bash theme={null}
curl -X GET 'https://api.cometapi.com/mj/task/<task_id>/fetch' \
  -H "Authorization: Bearer $COMETAPI_KEY"
```

Send inn masken og Prompt-en via Modal API-et:

```bash theme={null}
curl -X POST 'https://api.cometapi.com/mj/submit/modal' \
  -H "Authorization: Bearer $COMETAPI_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "taskId": "<task_id>",
    "prompt": "replace with golden crown",
    "maskBase64": "data:image/png;base64,<base64-encoded-png-mask>"
  }'
```

***

## Valg av hastighetsmodus

Legg til hastighetsprefiks i banen:

| Modus | Baneprefiks | Eksempel                      |
| ----- | ----------- | ----------------------------- |
| Rask  | `/mj-fast`  | `/mj-fast/mj/submit/imagine`  |
| Turbo | `/mj-turbo` | `/mj-turbo/mj/submit/imagine` |
| Relax | (standard)  | `/mj/submit/imagine`          |

***

## Andre inngangspunkter

Disse API-ene er **uavhengige inngangspunkter** som ikke følger imagine → action-flyten:

| API                                                               | Formål                        |
| ----------------------------------------------------------------- | ----------------------------- |
| [`POST /mj/submit/blend`](/no/api/image/midjourney/blend)         | Slå sammen 2–5 bilder til ett |
| [`POST /mj/submit/describe`](/no/api/image/midjourney/describe)   | Generer Prompt fra bilde      |
| [`POST /mj/submit/video`](/no/api/image/midjourney/submit-video)  | Konverter bilde til video     |
| [`POST /mj/submit/edits`](/no/api/image/midjourney/submit-editor) | Rediger bilde med maske       |

***

## Feilsøkingstips

Basert på API-utformingen og arbeidsflyten er dette vanlige problemer du kan støte på:

| Problem                                | Sannsynlig årsak                         | Løsning                                                                                                                         |
| -------------------------------------- | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| Finner ikke Vary (Region)-knappen      | Ser på et 4-rutenettsbilde               | Oppskaler først (klikk U1-U4), og sjekk deretter knappene                                                                       |
| Oppgavestatusen sitter fast på `MODAL` | Operasjonen krever ytterligere inndata   | Kall [`/mj/submit/modal`](/no/api/image/midjourney/modal) med nødvendige data                                                   |
| `customId` fungerer ikke               | Bruker en utdatert eller hardkodet verdi | Hent alltid ny `customId` fra [`/mj/task/\{id\}/fetch`](/no/api/image/midjourney/task-fetching-api/fetch-single-task) responsen |
| Tom `buttons`-array                    | Oppgaven pågår fortsatt                  | Vent på `status: "SUCCESS"` før du åpner knappene                                                                               |
