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

# İş akışı alanlarını kaydet

> Firma iş akışının öznitelik dizisini ekler/günceller.

## Ne yapar?

Firma iş akışının öznitelik dizisini ekler/günceller. id yoksa yeni kayıt üretilir; id verilirse firma ve iş akışı sahipliği doğrulanır. Tekrarlanan alan/seçenek kimlikleri 400. Sıra dizi konumudur; dizide atlanan alanlar silinmez. Son düzenleyen kullanıcı bilgisi saklanır.

## Ön koşullar ve izin

Etkin API anahtarı ve `muhasip:bank:write` izni gerekir.

İlişkili kayıtlar aynı firmaya ait olmalıdır. Erişim ayarları için [kimlik ve izinler](/baslangic/kimlik-ve-izinler) rehberini inceleyin.

[İstek ve cevap şemalarını indirin](/openapi.json).

## İstek örnekleri

Örnekler temsilîdir. Kimlikleri, belge tarihlerini ve iş verisini kendi yetkili kayıtlarınızla değiştirin. Node.js örnekleri **Node.js 20 veya üzeri** içindir; PHP örnekleri cURL uzantısını kullanır. Hiçbiri otomatik tekrar yapmaz.

<CodeGroup>
  ```bash cURL theme={null}
  curl --request PATCH 'https://api.muhasip.pro/apps/bank/ws/workflows/64b000000000000000000001/attributes' \
    --user "$MUHASIP_API_USER_ID:$MUHASIP_API_SECRET" \
    --header 'Accept: */*' \
    --header 'Content-Type: application/json' \
    --data-binary @- <<'JSON'
  [
    {
      "title": "İşlem etiketi",
      "type": "select",
      "options": [
        {
          "title": "Kontrol edilecek",
          "color": "amber"
        }
      ]
    }
  ]
  JSON
  ```

  ```php PHP theme={null}
  <?php
  $apiUserId = getenv('MUHASIP_API_USER_ID');
  $secretKey = getenv('MUHASIP_API_SECRET');
  if (!$apiUserId || !$secretKey) {
      throw new RuntimeException('API kimlik bilgileri eksik.');
  }
  $headers = ['Accept: */*', 'Content-Type: application/json'];
  $body = <<<'JSON'
  [
    {
      "title": "İşlem etiketi",
      "type": "select",
      "options": [
        {
          "title": "Kontrol edilecek",
          "color": "amber"
        }
      ]
    }
  ]
  JSON;
  $handle = curl_init('https://api.muhasip.pro/apps/bank/ws/workflows/64b000000000000000000001/attributes');
  curl_setopt_array($handle, [
      CURLOPT_CUSTOMREQUEST => 'PATCH',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_FOLLOWLOCATION => false,
      CURLOPT_HTTPHEADER => $headers,
      CURLOPT_CONNECTTIMEOUT => 10,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
      CURLOPT_USERPWD => $apiUserId . ':' . $secretKey,
      CURLOPT_POSTFIELDS => $body,
  ]);
  $response = curl_exec($handle);
  $httpStatus = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
  curl_close($handle);
  if ($response === false) {
      throw new RuntimeException('Bağlantı tamamlanamadı; mali işlemi otomatik tekrarlamayın.');
  }
  if ($httpStatus < 200 || $httpStatus >= 300) {
      throw new RuntimeException('HTTP ' . $httpStatus . '; kaynak hata açıklamasını değerlendirin.');
  }
  // $response gövdesini bu işlemin cevap biçimine göre işleyin; ham cevabı loglamayın.
  echo 'HTTP ' . $httpStatus . PHP_EOL;
  ```

  ```javascript Node.js theme={null}
  async function main() {
    const apiUserId = process.env.MUHASIP_API_USER_ID
    const secretKey = process.env.MUHASIP_API_SECRET
    if (!apiUserId || !secretKey) throw new Error("API kimlik bilgileri eksik.")
    const response = await fetch("https://api.muhasip.pro/apps/bank/ws/workflows/64b000000000000000000001/attributes", {
      method: "PATCH",
      redirect: "manual",
      headers: {
        Accept: "*/*",
        Authorization: "Basic " + Buffer.from(`${apiUserId}:${secretKey}`).toString("base64"),
        "Content-Type": "application/json"
      },
      body: JSON.stringify([
        {
          title: "İşlem etiketi",
          type: "select",
          options: [
            {
              title: "Kontrol edilecek",
              color: "amber"
            }
          ]
        }
      ]),
      signal: AbortSignal.timeout(30000)
    })
    const data = await response.arrayBuffer()
    if (!response.ok) throw new Error(`HTTP ${response.status}; kaynak hata açıklamasını değerlendirin.`)
    // data gövdesini bu işlemin cevap biçimine göre işleyin; ham cevabı loglamayın.
    console.log("HTTP", response.status)
  }

  main().catch(() => {
    console.error("İstek tamamlanamadı; mali işlemi otomatik tekrarlamayın.")
    process.exitCode = 1
  })
  ```
</CodeGroup>

## Cevabı değerlendirin

Önce HTTP durumunu, ardından bu kaynağın `status` ve sonuç alanlarını değerlendirin. Bütün uçlar aynı sonuç zarfını veya oluşturma için `201` kodunu kullanmaz.

Temsilî başarılı cevap; gerçek hizmet çağrısından alınmamıştır:

```json theme={null}
{
  "status": true,
  "attributes": {
    "acknowledged": true,
    "matchedCount": 0,
    "modifiedCount": 0,
    "upsertedCount": 1
  }
}
```

## Hata durumunda

| HTTP | Bu işlemde anlamı | İzlenecek adım |
| - | - | - |
| 400 | İstek alanları veya kimlik geçersiz. | Alan adını, türünü ve zorunluluğunu kontrol edin; değişmeyen hatalı isteği tekrar göndermeyin. |
| 401 | API kimliği/parolası, erişim süresi veya firma doğrulanamadı. | Anahtar kimliğini, gizli değeri, erişim süresini ve firma erişimini kontrol edin. |
| 403 | API izni, IP kısıtı veya kayıt erişimi uygun değil. | Anahtarın izinlerini, IP kısıtını ve kayıt kimliğini kontrol edin. |
| 404 | Kayıt bulunamadı veya bu erişim bağlamında kullanılamıyor. | Hedef kimliğini ve aynı firmaya ait olduğunu doğrulayın; bu cevap başka firmanın kaydını açmaz. |
| 429 | Ortak istek sınırı aşıldı; sayısal status alanı kullanılır. | Varsa Retry-After bilgisini değerlendirin. Mali çağrıyı otomatik yeniden göndermeyin. |
| 500 | İşlem gerçekleştirilemedi. | İşlem sonucunu inceleyin; bağlantı/hata oluşması mali etkinin hiç başlamadığını kanıtlamaz. |

Ağ kesintisi, zaman aşımı veya JSON olmayan cevap mali etkinin oluşmadığını kanıtlamaz. Ham istek/cevapları genel loglara yazmayın. [Hata yönetimi](/rehberler/hata-yonetimi)

## Sonraki adım

İlgili liste veya detay çağrısıyla kaydı ve bağlı iş sonucunu doğrulayın. Fiziksel silme, arşiv ve mali iptali ayrı değerlendirin.

[Kaynak akışı](/rehberler/kaynaklar/is-akislari) · [İşlem takibi](/rehberler/islem-takibi) · [Kapsam ve sınırlamalar](/rehberler/kapsam-ve-sinirlamalar)


## OpenAPI

````yaml openapi.json PATCH /apps/bank/ws/workflows/{id}/attributes
openapi: 3.0.3
info:
  title: Muhasip API
  version: 2026-10-18.1
  description: >-
    Fatura, banka, POS ve tahsilat, GİB e-Arşiv, pazaryeri, online işlemler,
    görevler, ajanda ve takvim entegrasyonları. İşlem alanları, izinler, istek
    ve cevap örnekleri ile hata yönetimi.
servers:
  - url: https://api.muhasip.pro
    description: Muhasip API
security:
  - BasicAuth: []
tags:
  - name: Uygulamalar
  - name: Görev yönetimi
  - name: Ajanda ve takvim
  - name: Fatura
    description: Fatura bağlantısı, belge işlemleri ve muhasebeye aktarım.
  - name: Banka
    description: >-
      Banka hesapları, hareketler, mahsup ve mevcut çalışma alanı alt
      kaynakları.
  - name: POS ve tahsilat
    description: POS hesapları, komisyonlar ve tahsilat bağlantıları.
  - name: GİB e-Arşiv
    description: GİB hesabı, sorgu, taslak ve SMS imzalama.
  - name: Pazaryeri
    description: Trendyol bağlantısı ve sipariş aktarımı.
  - name: Online işlemler
    description: Online işlem ekranı yapılandırması.
  - name: İşlem takibi
    description: Mali işlem durumu ve tekrar çağrı makbuzları.
paths:
  /apps/bank/ws/workflows/{id}/attributes:
    patch:
      tags:
        - Banka
      summary: İş akışı alanlarını kaydet
      description: >-
        Firma iş akışının öznitelik dizisini ekler/günceller. id yoksa yeni
        kayıt üretilir; id verilirse firma ve iş akışı sahipliği doğrulanır.
        Tekrarlanan alan/seçenek kimlikleri 400. Sıra dizi konumudur; dizide
        atlanan alanlar silinmez. Son düzenleyen kullanıcı bilgisi saklanır.
      operationId: muhasipPatchAppsBankWsWorkflowsIdAttributes
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
            pattern: ^[a-fA-F0-9]{24}$
            description: 24 karakterli Muhasip kayıt kimliği.
          description: ''
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              maxItems: 250
              items:
                $ref: '#/components/schemas/FinanceWorkflowAttributeWrite'
            example:
              - title: İşlem etiketi
                type: select
                options:
                  - title: Kontrol edilecek
                    color: amber
      responses:
        '200':
          description: İşlem cevabı; örnek temsilîdir.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: boolean
                  attributes:
                    $ref: '#/components/schemas/FinanceWriteResult'
                required:
                  - status
                  - attributes
              example:
                status: true
                attributes:
                  acknowledged: true
                  matchedCount: 0
                  modifiedCount: 0
                  upsertedCount: 1
        '400':
          description: İstek alanları veya kimlik geçersiz.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                status: false
                message: İstek alanları veya kimlik geçersiz.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          description: İşlem gerçekleştirilemedi.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                status: false
                message: İşlem gerçekleştirilemedi.
components:
  schemas:
    FinanceWorkflowAttributeWrite:
      type: object
      properties:
        id:
          type: string
          pattern: ^[a-fA-F0-9]{24}$
          description: 24 karakterli Muhasip kayıt kimliği.
        title:
          type: string
          minLength: 1
          maxLength: 300
        description:
          type: string
          maxLength: 5000
          default: ''
        isMultiple:
          type: boolean
          default: false
        isRequired:
          type: boolean
          default: false
        isUnique:
          type: boolean
          default: false
        isRange:
          type: boolean
          default: false
        type:
          type: string
          enum:
            - checkbox
            - created_by
            - created_time
            - date
            - email
            - files
            - formula
            - last_edited_by
            - last_edited_time
            - number
            - people
            - phone_number
            - relation
            - rich_text
            - rollup
            - select
            - status
            - title
            - url
          default: title
        format:
          type: string
          maxLength: 100
          default: null
          nullable: true
        defaultValue:
          description: Serbest değer; tehlikeli nesne anahtarları kabul edilmez.
        options:
          type: array
          maxItems: 250
          items:
            $ref: '#/components/schemas/FinanceWorkflowAttributeOption'
          default: []
      required:
        - title
      additionalProperties: false
    FinanceWriteResult:
      type: object
      properties:
        acknowledged:
          type: boolean
        matchedCount:
          type: integer
        modifiedCount:
          type: integer
        upsertedCount:
          type: integer
        upsertedId:
          type: string
          nullable: true
        deletedCount:
          type: integer
      additionalProperties: true
      description: >-
        İşleme göre yalnız ilgili sayımlar bulunur. matchedCount eşleşen,
        modifiedCount değişen, deletedCount silinen kayıt sayısıdır.
    Error:
      type: object
      properties:
        status:
          type: boolean
        code:
          type: string
        message:
          type: string
        description:
          type: string
        retryable:
          type: boolean
        reviewRequired:
          type: boolean
        operationId:
          type: string
      required:
        - status
      additionalProperties: true
    FinanceWorkflowAttributeOption:
      type: object
      properties:
        id:
          type: string
          pattern: ^[a-fA-F0-9]{24}$
          description: 24 karakterli Muhasip kayıt kimliği.
        title:
          type: string
          minLength: 1
          maxLength: 300
        icon:
          type: string
          maxLength: 100
          nullable: true
        color:
          type: string
          enum:
            - slate
            - gray
            - red
            - orange
            - amber
            - yellow
            - green
            - emerald
            - blue
            - indigo
            - violet
            - pink
          default: slate
      required:
        - title
      additionalProperties: false
    RateLimitError:
      type: object
      properties:
        status:
          type: integer
          enum:
            - 429
        error:
          type: string
        message:
          type: string
      required:
        - status
        - error
        - message
  responses:
    Unauthorized:
      description: API kimliği/parolası, erişim süresi veya firma doğrulanamadı.
      headers:
        WWW-Authenticate:
          schema:
            type: string
          description: Basic realm="Muhasip API", charset="UTF-8"
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            status: false
            code: UNAUTHORIZED
            message: API kimlik bilgileri doğrulanamadı.
    Forbidden:
      description: Ürün, IP, modül izni veya kaynak kapsamı uygun değil.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            status: false
            message: Ürün, IP, modül izni veya kaynak kapsamı uygun değil.
    NotFound:
      description: Kayıt bulunamadı veya bu erişim bağlamında kullanılamıyor.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            status: false
    RateLimited:
      description: Ortak istek sınırı aşıldı; sayısal status alanı kullanılır.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RateLimitError'
          example:
            status: 429
            error: Too Many Requests
            message: Rate limit exceeded. Please try again later.
  securitySchemes:
    BasicAuth:
      type: http
      scheme: basic
      description: >-
        Kullanıcı adı apiUserId, parola secretKey. Aktif ve süresi geçmemiş API
        kullanıcısı ve uygun firma gerekir.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.