# Leveransstatus från T-shirt.se till Pinshirt

Ni rapporterar status per order genom ett anrop till vårt api. Statusen sparas på
ordern och visas i vårt adminverktyg. Ni bestämmer själva vilka statustexter ni
använder — vi tolkar dem inte, vi visar dem.

## Anrop

```
POST https://api.pinshirt.dev/printery/orders/{orderId}/status
Order-Integration-Key: <API-nyckel ni får av oss>
Content-Type: application/json
```

- `{orderId}` är Pinshirts ordernummer — samma nummer som i CSV-filens kolumn
  `order_id` och i filnamnet `pinshirt_order_{orderId}.csv`.
- Nyckeln i headern `Order-Integration-Key`.
- Testmiljön har samma adress under `https://testapi.pinshirt.dev/…` och en egen
  nyckel. Ni får api-nycklarna av oss när implementationen är klar på vår sida.

## Anropskropp

```json
{
  "status": "Skickad med PostNord",
  "timestamp": "2026-09-08T10:15:00+02:00",
  "trackingNumber": "UA123456789SE",
  "carrier": "PostNord",
  "message": "Två kollin"
}
```

| Fält | Krav | Beskrivning |
| --- | --- | --- |
| `status` | obligatoriskt | Fri text, 1–200 tecken. Er benämning på steget: "Mottagen", "I produktion", "Skickad med PostNord" — vad ni vill. |
| `timestamp` | valfritt | När statusen inträffade, ISO 8601 med tidszon. Utelämnas → tidpunkten då anropet togs emot. |
| `trackingNumber` | valfritt | Spårningsnummer, max 100 tecken. |
| `carrier` | valfritt | Transportör, max 50 tecken. |
| `message` | valfritt | Fri text, max 1000 tecken. Visas för vår personal. |

## Svar

| Kod | När | Kropp |
| --- | --- | --- |
| `204 No Content` | Statusen är sparad. | tom |
| `400 Bad Request` | `status` saknas, är tom eller längre än 200 tecken, eller kroppen är inte giltig JSON. | JSON, se nedan |
| `401 Unauthorized` | Headern `Order-Integration-Key` saknas eller nyckeln är fel. | texten `Unauthorized` |
| `404 Not Found` | Ordernumret finns inte, eller ordern har inte överlämnats till er (ingen CSV har laddats upp för den). | tom |

Exempel på `400`:

```json
{
  "type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "status": ["The status field is required."]
  }
}
```

## curl

```sh
curl -i -X POST "https://api.pinshirt.dev/printery/orders/4711/status" \
  -H "Order-Integration-Key: $PINSHIRT_ORDER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"status":"Skickad med PostNord","timestamp":"2026-09-08T10:15:00+02:00","trackingNumber":"UA123456789SE","carrier":"PostNord"}'
```

Förväntat svar: `HTTP/1.1 204 No Content`.

Minsta möjliga anrop, bara statusen:

```sh
curl -i -X POST "https://api.pinshirt.dev/printery/orders/4711/status" \
  -H "Order-Integration-Key: $PINSHIRT_ORDER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"status":"I produktion"}'
```

## Swagger

När implementationen är klar får ni en Swagger-URL där anropet är dokumenterat och
kan provköras mot vår testmiljö.
