---
title: "Dodaj lub zaktualizuj kontakty"
method: POST
path: "/v1/contacts"
tags: ["Kontakty i grupy"]
---

# Dodaj lub zaktualizuj kontakty

`POST /v1/contacts`

## Request

- Base URL: `https://api.przypominamy.com`
- URL: `https://api.przypominamy.com/v1/contacts`
- Auth: HTTP bearer

Upsert po numerze: istniejący kontakt z tym `msisdn` jest aktualizowany (podane pola nadpisują, pominięte zostają), nowy - tworzony. Treść żądania to **jeden obiekt** (odpowiedź 201 przy utworzeniu, 200 przy aktualizacji, zwraca kontakt) **albo tablica** do 500 obiektów (odpowiedź 201 `{ created, updated, invalid: [{ index, message }] }`; błędne elementy nie przerywają importu). `groups` przyjmuje nazwy lub id `gr_…`; nieistniejące nazwy są tworzone; podanie `groups` zastępuje dotychczasowe przypisania kontaktu. Pola własne `fields`: klucz `[a-zA-Z_][a-zA-Z0-9_]{0,30}`, wartość do 200 znaków, maks. 20 pól - używasz ich w treści jako `{{nazwa_pola}}`. Wymaga zakresu `manage`.

## Request body

- ContactInput: Treść `POST /v1/contacts` (wymagane `msisdn`) i `PATCH /v1/contacts/{id}` (wszystko opcjonalne). W `POST` może być też tablicą takich obiektów (do 500).
  - `msisdn` string: Numer (E.164, bez plusa lub 9 cyfr = Polska); klucz upsertu
  - `first_name` string, nullable: Imię - placeholder `{{imie}}`
  - `last_name` string, nullable: Nazwisko - placeholder `{{nazwisko}}`
  - `email` string, nullable: Placeholder `{{email}}`
  - `fields` object, nullable: Pola własne (do 20; klucz `[a-zA-Z_][a-zA-Z0-9_]{0,30}`) - placeholder `{{nazwa_pola}}`
  - `groups` string[]: Nazwy lub id grup; nieistniejące nazwy są tworzone; zastępuje dotychczasowe przypisania

## Response `200`

Zaktualizowano istniejący kontakt (tylko dla pojedynczego obiektu)

- Contact
  - `id` string
  - `msisdn` string
  - `first_name` string, nullable
  - `last_name` string, nullable
  - `email` string, nullable
  - `fields` object: Pola własne
  - `groups` object[]
    - `id` string
    - `name` string
  - `created_at` string, date-time
  - `updated_at` string, date-time

## Other responses

- `201`: Utworzono (obiekt Contact) lub zaimportowano (podsumowanie)
- `400`: Błąd walidacji
- `401`: Brak lub nieprawidłowy klucz API
- `403`: Klucz bez wymaganego zakresu (albo konto zawieszone / testowe wysyła na niezweryfikowany numer)
- `404`: Podano id nieistniejącej grupy

---

[API](https://skmtc.dev/przypominamy/apis/przypominamy-com-sms-api.md) · [All operations](https://skmtc.dev/przypominamy/apis/przypominamy-com-sms-api/llms.txt) · [OpenAPI document](https://skmtc.dev/przypominamy/apis/przypominamy-com-sms-api/revisions/c20f9cfc2a7d?raw)
