İçeriğe geç
siparis.app geliştiriciAnahtarları yönet ↗

Müşteriler

Müşteriyi güncelle

PATCH/v1/customers/{id}

Müşteri kartının adını, iletişim bilgilerini veya notunu değiştirin.

Gereken izin

Bearer anahtarı ve customers:write

Koşula bağlı izin

internal_notes:write: İstekte note gönderirseniz gerekir. Eksikse 403 döner. personal_data:write: İstekte email, phone, address, invoice, marketing_consent, name gönderirseniz gerekir. Eksikse 403 döner.

Yanıtı genişleten izin

personal_data:read, internal_notes:read: yanıttaki ilgili alanları açar; izin yoksa bu alanlar atlanır, istek reddedilmez.

Maliyet

1 puan (bağlantı başına 60 saniyede 600 puan)

Tekrar anahtarı

Gerekir: Idempotency-Key başlığı.

İstek

Temel adres: https://api.siparis.app/v1

Yol parametreleri

AlanTürZorunluAçıklamaÖrnek
idmetinEvetOkunacak kaynağın cus_ önekli dış kimliği."cus_1234567890abcdef1234567890abcdef"

Başlıklar

AlanTürZorunluAçıklamaÖrnek
Idempotency-Keymetin · null olabilirEvetZorunlu tekrar anahtarı; en çok 200 karakter. Yeni işte yeni değer; ağ tekrarında aynı gövde ve aynı değer."ilk-esitleme-20261016-001"
If-Matchmetin · null olabilirHayırİsteğe bağlı önkoşul: son ETag değerini çift tırnaklarıyla gönderin. Komutun kilidi altında farklıysa 412 revision_mismatch."\"3\""

Gövde (application/json)

AlanTürZorunluAçıklamaÖrnek
addressnesne · null olabilirHayırMüşterinin adresi; null adresi kaldırır. personal_data:write gerekir.
address_linemetin (en çok 1000 karakter)HayırAçık adres."Örnek Sokak No: 1"
citymetin (en çok 100 karakter)Hayırİl."İstanbul"
districtmetin (en çok 100 karakter)Hayırİlçe."Kadıköy"
neighborhoodmetin (en çok 100 karakter)HayırMahalle veya köy adı."Caferağa"
neighborhood_areametin (en çok 100 karakter)HayırVarsa bağlı köy, semt veya belde.""
postal_codemetin (en çok 10 karakter)HayırPosta kodu."34710"
villagetrue/falseHayırKöy adresiyse true.false
emailmetin (en çok 320 karakter) · null olabilirHayırE-posta; null veya boş metin alanı temizler. personal_data:write gerekir."musteri@example.com"
invoicenesne · null olabilirHayırFatura bilgisi; null kaldırır. personal_data:write gerekir.
company_namemetin (en çok 500 karakter)EvetŞirket faturası için firma unvanı; panelin doğrulaması uygulanır."Örnek Şirket"
tax_numbermetin (en çok 50 karakter)EvetVergi veya kimlik numarası; panelin VKN/TCKN doğrulaması uygulanır."1234567890"
tax_officemetin (en çok 200 karakter)EvetVergi dairesi; şirket faturasında zorunludur."Kadıköy"
marketing_consenttrue/false · null olabilirHayırPazarlama izni: true var, false yok, null bilinmiyor. personal_data:write gerekir.false
namemetin (en çok 500 karakter) · null olabilirHayırYeni müşteri adı; null olamaz. Gönderilmeyen alan korunur. personal_data:write gerekir."Örnek Müşteri Yeni"
notemetin (en çok 10000 karakter) · null olabilirHayırİç not; null veya boş metin kaldırır. internal_notes:write gerekir."Teslimden önce bilgi verin."
phonemetin (en çok 50 karakter) · null olabilirHayırTelefon; null veya boş metin alanı temizler. personal_data:write gerekir."05000000000"

Örnek istek

curl --fail-with-body --silent --show-error --request PATCH \
  "${SIPARIS_API_URL:-https://api.siparis.app/v1}/customers/cus_1234567890abcdef1234567890abcdef" \
  -H "Authorization: Bearer $SIPARIS_API_KEY" \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: ornek-patch-v1-customers-cus-1234567890abcdef1234567890abcdef-001' \
  --data-binary @- <<'JSON'
{
  "name": "Örnek Müşteri Yeni"
}
JSON
import json
import os
from urllib.request import Request, build_opener, HTTPRedirectHandler
from urllib.error import HTTPError

# İmzalı indirme hedefine Bearer taşımamak için yönlendirme kendiliğinden izlenmez.
class NoRedirect(HTTPRedirectHandler):
    def redirect_request(self, req, fp, code, msg, headers, newurl):
        return None

base = os.environ.get("SIPARIS_API_URL", "https://api.siparis.app/v1")
headers = {
    "Authorization": "Bearer " + os.environ["SIPARIS_API_KEY"],
    "Content-Type": "application/json",
    "Idempotency-Key": "ornek-patch-v1-customers-cus-1234567890abcdef1234567890abcdef-001",
}
request = Request(base + "/customers/cus_1234567890abcdef1234567890abcdef", headers=headers, method="PATCH",
    data="{\"name\":\"Örnek Müşteri Yeni\"}".encode("utf-8"))
try:
    with build_opener(NoRedirect).open(request, timeout=30) as response:
        print(response.read().decode("utf-8"))
except HTTPError as error:
    print(error.code, error.read().decode("utf-8"))
    raise
// Node.js 22+; anahtar yalnız sunucunun ortam değişkenindedir.
const base = process.env.SIPARIS_API_URL ?? "https://api.siparis.app/v1";
if (!process.env.SIPARIS_API_KEY) throw new Error("SIPARIS_API_KEY gerekli");
const response = await fetch(base + "/customers/cus_1234567890abcdef1234567890abcdef", {
  method: "PATCH",
  headers: {
    "Authorization": `Bearer ${process.env.SIPARIS_API_KEY}`,
    "Content-Type": "application/json",
    "Idempotency-Key": "ornek-patch-v1-customers-cus-1234567890abcdef1234567890abcdef-001",
  },
  redirect: "manual", // 307 hedefini Bearer olmadan ayrı istekte okuyun.
  signal: AbortSignal.timeout(30_000),
  body: JSON.stringify({
  "name": "Örnek Müşteri Yeni"
}),
});
const text = await response.text();
if (!response.ok) throw new Error(`${response.status}: ${text}`);
console.log(text);

Kimlik içeren yollarda örnek kimliği kendi liste yanıtınızdan alın. SIPARIS_API_KEY sunucu ortamında tanımlı olmalı; yerelde SIPARIS_API_URL ile /v1 içeren adresi değiştirin. Üretimde tekrar kurallarını uygulayın.

Yanıt

200 İstek başarıyla tamamlandı.

İçerik türü: application/json

{
  "archived": false,
  "created_at": "2026-10-16T09:00:00Z",
  "id": "cus_1234567890abcdef1234567890abcdef",
  "revision": 1,
  "store": "sto_1234567890abcdef1234567890abcdef",
  "updated_at": "2026-10-16T09:00:00Z"
}
Yanıt alanları (26)
AlanTürZorunluAçıklamaÖrnek
archivedtrue/falseEvetArşivdeki veya kapanmış kaynaksa true. archived=true süzgeci bunları da içerir.false
created_attarih-saatEvetOluşturulma zamanı; RFC 3339 UTC."2026-10-16T09:00:00Z"
idmetinEvetKaynağın dış kimliği; cus_ ve 32 küçük onaltılık karakter. İç sayısal kimlik kullanılmaz."cus_1234567890abcdef1234567890abcdef"
revisiontam sayı (en az 1)EvetMüşteri kartının artan sürümü; ETag ve If-Match ile birlikte kullanılır.1
storemetinEvetMarka kimliği (sto_ ve 32 küçük onaltılık karakter)."sto_1234567890abcdef1234567890abcdef"
updated_attarih-saatEvetSon değişiklik zamanı; RFC 3339 UTC."2026-10-16T09:00:00Z"
addressnesne · null olabilirHayırMüşteri adresi; personal_data:read yoksa alan atlanır.
address_linemetin · null olabilirHayırAdres satırı; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
citymetin · null olabilirHayırİl; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
districtmetin · null olabilirHayırİlçe; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
full_namemetin · null olabilirHayırAd soyad; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
neighborhoodmetin · null olabilirHayırMahalle; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
neighborhood_areametin · null olabilirHayırVarsa bağlı köy, semt veya belde; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
phonemetin · null olabilirHayırTelefon; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
postal_codemetin · null olabilirHayırPosta kodu; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
villagetrue/false · null olabilirHayırKöy adresi işareti; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
emailmetin · null olabilirHayırE-posta; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
instagrammetin · null olabilirHayırInstagram kullanıcı adı; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
invoicenesne · null olabilirHayırFatura alıcı bilgileri; personal_data:read yoksa alan atlanır.
company_namemetin · null olabilirHayırFatura unvanı; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
tax_numbermetin · null olabilirHayırVergi/kimlik numarası; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
tax_officemetin · null olabilirHayırVergi dairesi; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
marketing_consenttrue/false · null olabilirHayırPazarlama iletişimi izni; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null
namemetin · null olabilirHayırMüşteri adı; personal_data:read yoksa alan atlanır.null
notemetin · null olabilirHayırİç not; internal_notes:read gerekir. Kişisel kaynakta personal_data:read da gerekir."Örnek iç not"
phonemetin · null olabilirHayırTelefon; yalnız personal_data:read kapsamında görünür. Örnek kişisel veri içermez.null

Bu uca özgü yanıt başlıkları: ETag (Kaynağın güçlü sürüm etiketi; If-Match için tırnaklarıyla saklayın.).

Hatalar

HTTPcodeAnlamıNasıl düzelir?
403forbiddenMevcut ticari kural bu işlemi yapmanıza izin vermiyor.Gerekli kapsamları ve siparişin durumunu kontrol edin.
409conflictSipariş veya ödeme bilgisi değişmiş ya da işlem mevcut duruma uygun değil.Güncel siparişi okuyun, iş kuralını kontrol edip yeni tekrar anahtarıyla deneyin.
400invalid_if_matchIf-Match geçerli bir güçlü ETag değil.GET kaynak yanıtındaki ETag değerini çift tırnaklarıyla aynen kullanın.
412revision_mismatchKayıt siz okuduktan sonra değişmiş.Güncel kaydı okuyun; düzeltmeyi yeniden değerlendirip yeni tekrar anahtarıyla gönderin.

Ortak hatalar (anahtar, izin, istek biçimi, hız sınırı, tekrar anahtarı) her uçta aynıdır: Hata kodları › Ortak hatalar.