Faturalar API

Faturalar modülünün tüm işlemleri (14) ve veri modelleri (4): adresler, izinler, girdiler, ön koşullar, olaylar ve örnekler.

Her satırında vergisi olan numaralı faturalar ve iade faturaları.

Modül kodu invoices · 14 işlem · 4 veri modeli · 12 olay. Bir anahtar ya da token, arkasındaki kişinin bu modülde yapabildiğinden fazlasını asla yapamaz; satır düzeyindeki güvenlik uygulamadakiyle birebir aynıdır. Yetki kapsamları: invoices (hepsi), invoices:read (yalnız okuma) ya da invoices:<yetenek>.

Kaynaklar

KaynakTabloListeleme ve okumaPOSTPATCHDELETE
invoice_attachmentsinvoice_attachment/api/v1/invoice_attachments
invoice_eventsinvoice_event/api/v1/invoice_events
invoice_linesinvoice_line/api/v1/invoice_lines
invoicesinvoice/api/v1/invoices

Listeler limit (en çok 200), cursor, order (ör. -created_at), fields ve q alır; diğer her sorgu parametresi bir sütun süzgecidir: ?status=paid, ?total[gte]=100, ?id[in]=a,b, ?x=null.

İşlemler

İşlemGereken izinNe yapar
invoices.add_noteinvoices:writeNot ekle
invoices.attach_fileinvoices:writeDosya ekle
invoices.create_draftinvoices:writeFatura başlat
invoices.create_from_agreementinvoices:writeSözleşmeyi faturalandır
invoices.detach_fileinvoices:writeDosyayı ayır
invoices.issueinvoices:writeFaturayı kes
invoices.issue_credit_noteinvoices:manageİade faturası kes
invoices.mark_paidinvoices:writeÖdendi işaretle
invoices.mark_sentinvoices:writeGönderildi işaretle
invoices.raise_noticesinvoices:writeFatura hatırlatmalarını oluştur
invoices.sendinvoices:writeE-postayla gönder
invoices.settle_from_agreementinvoices:writeSözleşmeden kapat
invoices.update_draftinvoices:writeTaslak faturayı düzenle
invoices.voidinvoices:manageFaturayı iptal et

invoices.add_note

Not ekle — Faturanın kendi geçmişine bir satır.

Gereken izin invoices:write · veriyi değiştirir

POSThttps://app.getera.io/api/v1/invoice_events/actions/add_note
API anahtarı ya da OAuth token · invoices:write
  • Asıl adres: POST /api/v1/actions/invoices.add_note

Girdi

AlanTürZorunluAçıklama
iduuidevetFatura · kimliği: invoice
messagestringevetNot · en çok 4000

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
invoice_not_foundFatura bulunmalı.

Yayımladığı olaylar: invoices.note_added

Neye yazar: invoice_event (insert) — Records the note

curl -X POST https://app.getera.io/api/v1/invoice_events/actions/add_note \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"id":"INVOICE_ID","message":"Note"}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "invoices.note_added"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.invoiceEvents.addNote({
  id: "INVOICE_ID",
  message: "Note"
})
era invoice_events add_note \
  --id "INVOICE_ID" \
  --message "Note"
tools/call
{
  "name": "era__invoices__add_note",
  "arguments": {
    "id": "INVOICE_ID",
    "message": "Note"
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde invoices:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 invoice_not_found · 429 çok sık istek

invoices.attach_file

Dosya ekle — Yüklenmiş bir dosyayı faturaya bağlar.

Gereken izin invoices:write · veriyi değiştirir

POSThttps://app.getera.io/api/v1/invoice_attachments/actions/attach_file
API anahtarı ya da OAuth token · invoices:write
  • Asıl adres: POST /api/v1/actions/invoices.attach_file

Girdi

AlanTürZorunluAçıklama
iduuidevetFatura · kimliği: invoice
fileIduuidevetDosya · kimliği: file

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
invoice_not_foundFatura bulunmalı.
attachment_file_not_foundDosya bulunmalı.

Yayımladığı olaylar: invoices.attachments_changed

Neye yazar: invoice_attachment (insert) — Links the file; invoice_event (insert) — Records it

curl -X POST https://app.getera.io/api/v1/invoice_attachments/actions/attach_file \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"id":"INVOICE_ID","fileId":"FILE_ID"}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "invoices.attachments_changed"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.invoiceAttachments.attachFile({
  id: "INVOICE_ID",
  fileId: "FILE_ID"
})
era invoice_attachments attach_file \
  --id "INVOICE_ID" \
  --file-id "FILE_ID"
tools/call
{
  "name": "era__invoices__attach_file",
  "arguments": {
    "id": "INVOICE_ID",
    "fileId": "FILE_ID"
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde invoices:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 invoice_not_found, attachment_file_not_found · 429 çok sık istek

invoices.create_draft

Fatura başlat — Satırlarıyla bir taslak fatura; her satır dondurulmuş vergi bilgisi taşır.

Gereken izin invoices:write · veriyi değiştirir

POSThttps://app.getera.io/api/v1/invoices/actions/create_draft
API anahtarı ya da OAuth token · invoices:write
  • Asıl adres: POST /api/v1/actions/invoices.create_draft

Girdi

AlanTürZorunluAçıklama
customerIduuidevetFatura edilen · kimliği: customer
agreementIduuidSözleşme · kimliği: agreement
currencystringPara birimi · en çok 3
taxCountrystringVergi ülkesi · en çok 2
dueDatedateSon tarih
notesstringNotlar · en çok 4000
linesobject / arrayevetKalemler

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
customer_not_foundKişi bulunmalı.
customer_archivedArşivlenmiş bir kişiye fatura kesilmez.
invalid_currencyPara birimi bir ISO-4217 kodu olmalı.
agreement_not_foundBelirtilen sözleşme bulunmalı.
invoice_needs_linesFaturanın en az bir satırı olmalı.
invalid_invoice_linesHer satırın bir açıklaması, pozitif bir miktarı ve fiyatı olmalı.

Yayımladığı olaylar: invoices.draft_created

Neye yazar: invoice (insert) — Opens the draft; invoice_line (insert) — Writes its lines with their tax snapshot; invoice_event (insert) — Records that it was created

curl -X POST https://app.getera.io/api/v1/invoices/actions/create_draft \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"customerId":"CUSTOMER_ID","lines":{}}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "invoices.draft_created"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.invoices.createDraft({
  customerId: "CUSTOMER_ID",
  lines: {}
})
era invoices create_draft --data '{"customerId":"CUSTOMER_ID","lines":{}}'
tools/call
{
  "name": "era__invoices__create_draft",
  "arguments": {
    "customerId": "CUSTOMER_ID",
    "lines": {}
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde invoices:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 customer_not_found, customer_archived, invalid_currency, agreement_not_found, invoice_needs_lines, invalid_invoice_lines · 429 çok sık istek

invoices.create_from_agreement

Sözleşmeyi faturalandır — Bir sözleşmenin satırları, indirimi ve para biriminden taslak fatura.

Gereken izin invoices:write · veriyi değiştirir

POSThttps://app.getera.io/api/v1/invoices/actions/create_from_agreement
API anahtarı ya da OAuth token · invoices:write
  • Asıl adres: POST /api/v1/actions/invoices.create_from_agreement

Girdi

AlanTürZorunluAçıklama
agreementIduuidevetSözleşme · kimliği: agreement
taxCountrystringVergi ülkesi · en çok 2

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
agreement_not_foundSözleşme bulunmalı.
agreement_not_invoiceableİptal edilmiş bir sözleşme faturalanmaz.
agreement_already_invoicedBir sözleşmenin aynı anda tek geçerli faturası olur.

Yayımladığı olaylar: invoices.draft_created

Neye yazar: invoice (insert) — Opens the draft; invoice_line (insert) — Copies the lines; invoice_event (insert) — Records that it was created

curl -X POST https://app.getera.io/api/v1/invoices/actions/create_from_agreement \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"agreementId":"AGREEMENT_ID"}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "invoices.draft_created"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.invoices.createFromAgreement({
  agreementId: "AGREEMENT_ID"
})
era invoices create_from_agreement \
  --agreement-id "AGREEMENT_ID"
tools/call
{
  "name": "era__invoices__create_from_agreement",
  "arguments": {
    "agreementId": "AGREEMENT_ID"
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde invoices:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 agreement_not_found, agreement_not_invoiceable, agreement_already_invoiced · 429 çok sık istek

invoices.detach_file

Dosyayı ayır — Dosyanın faturayla bağını kaldırır; dosya Dosyalar’da kalır.

Gereken izin invoices:write · veriyi değiştirir

POSThttps://app.getera.io/api/v1/invoice_events/actions/detach_file
API anahtarı ya da OAuth token · invoices:write
  • Asıl adres: POST /api/v1/actions/invoices.detach_file

Girdi

AlanTürZorunluAçıklama
iduuidevetFatura · kimliği: invoice
fileIduuidevetDosya · kimliği: file

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
invoice_not_foundFatura bulunmalı.
attachment_not_foundDosya ekli olmalı.

Yayımladığı olaylar: invoices.attachments_changed

Neye yazar: invoice_attachment (delete) — Unlinks the file; invoice_event (insert) — Records it

curl -X POST https://app.getera.io/api/v1/invoice_events/actions/detach_file \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"id":"INVOICE_ID","fileId":"FILE_ID"}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "invoices.attachments_changed"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.invoiceEvents.detachFile({
  id: "INVOICE_ID",
  fileId: "FILE_ID"
})
era invoice_events detach_file \
  --id "INVOICE_ID" \
  --file-id "FILE_ID"
tools/call
{
  "name": "era__invoices__detach_file",
  "arguments": {
    "id": "INVOICE_ID",
    "fileId": "FILE_ID"
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde invoices:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 invoice_not_found, attachment_not_found · 429 çok sık istek

invoices.issue

Faturayı kes — Taslağa çalışma alanının kendi serisinden numarasını verir ve kime kesildiğini dondurur.

Gereken izin invoices:write · dışarıya ulaşır (gönderir, yayımlar ya da ücret alır) · Era çalıştırırken bir kişiye onaylatır

POSThttps://app.getera.io/api/v1/invoices/{id}/actions/issue
API anahtarı ya da OAuth token · invoices:write
  • Asıl adres: POST /api/v1/actions/invoices.issue

Girdi

AlanTürZorunluAçıklama
iduuidevetDoldurulduğu yer: adresteki {id} · Fatura · kimliği: invoice
issueDatedateDüzenleme tarihi
dueDatedateSon tarih

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
invoice_not_foundFatura bulunmalı.
invoice_not_draftYalnızca taslak kesilir.
invoice_needs_linesFaturanın en az bir satırı olmalı.

Yayımladığı olaylar: invoices.issued

Neye yazar: invoice (update) — Numbers and issues it; invoice_event (insert) — Records the issue

curl -X POST https://app.getera.io/api/v1/invoices/INVOICE_ID/actions/issue \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"issueDate":"2026-11-02"}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "invoices.issued"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.invoices.issue("INVOICE_ID", {
  issueDate: "2026-11-02"
})
era invoices issue INVOICE_ID \
  --issue-date "2026-11-02"
tools/call
{
  "name": "era__invoices__issue",
  "arguments": {
    "id": "INVOICE_ID",
    "issueDate": "2026-11-02"
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde invoices:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 invoice_not_found, invoice_not_draft, invoice_needs_lines · 429 çok sık istek

invoices.issue_credit_note

İade faturası kes — Kesilmiş veya ödenmiş bir faturayı tamamen, kendi numarasıyla ayrı bir belge olarak alacaklandırır.

Gereken izin invoices:manage · dışarıya ulaşır (gönderir, yayımlar ya da ücret alır) · Era çalıştırırken bir kişiye onaylatır

POSThttps://app.getera.io/api/v1/invoices/{id}/actions/issue_credit_note
API anahtarı ya da OAuth token · invoices:manage
  • Asıl adres: POST /api/v1/actions/invoices.issue_credit_note

Girdi

AlanTürZorunluAçıklama
iduuidevetDoldurulduğu yer: adresteki {id} · Fatura · kimliği: invoice
reasonstringevetNeden · en çok 2000

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
invoice_not_foundFatura bulunmalı.
invoice_not_creditableYalnızca kesilmiş veya ödenmiş bir faturaya iade faturası kesilir.
invoice_already_creditedBir faturaya bir kez iade faturası kesilir.

Yayımladığı olaylar: invoices.credit_note_issued

Neye yazar: invoice (insert) — Writes the credit note; invoice_line (insert) — Copies the credited lines; invoice_event (insert) — Records it on both documents

curl -X POST https://app.getera.io/api/v1/invoices/INVOICE_ID/actions/issue_credit_note \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"reason":"Reason"}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "invoices.credit_note_issued"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.invoices.issueCreditNote("INVOICE_ID", {
  reason: "Reason"
})
era invoices issue_credit_note INVOICE_ID \
  --reason "Reason"
tools/call
{
  "name": "era__invoices__issue_credit_note",
  "arguments": {
    "id": "INVOICE_ID",
    "reason": "Reason"
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde invoices:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 invoice_not_found, invoice_not_creditable, invoice_already_credited · 429 çok sık istek

invoices.mark_paid

Ödendi işaretle — Para finans dışında geldiğinde kesilmiş bir faturayı elle kapatır.

Gereken izin invoices:write · veriyi değiştirir

POSThttps://app.getera.io/api/v1/invoices/{id}/actions/mark_paid
API anahtarı ya da OAuth token · invoices:write
  • Asıl adres: POST /api/v1/actions/invoices.mark_paid

Girdi

AlanTürZorunluAçıklama
iduuidevetDoldurulduğu yer: adresteki {id} · Fatura · kimliği: invoice
paidAtdate-timeÖdeme zamanı

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
invoice_not_foundFatura bulunmalı.
invoice_not_issuedYalnızca kesilmiş fatura ödenir.

Yayımladığı olaylar: invoices.paid

Neye yazar: invoice (update) — Marks it paid; invoice_event (insert) — Records the payment

curl -X POST https://app.getera.io/api/v1/invoices/INVOICE_ID/actions/mark_paid \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"paidAt":"2026-11-02T09:00:00Z"}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "invoices.paid"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.invoices.markPaid("INVOICE_ID", {
  paidAt: "2026-11-02T09:00:00Z"
})
era invoices mark_paid INVOICE_ID \
  --paid-at "2026-11-02T09:00:00Z"
tools/call
{
  "name": "era__invoices__mark_paid",
  "arguments": {
    "id": "INVOICE_ID",
    "paidAt": "2026-11-02T09:00:00Z"
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde invoices:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 invoice_not_found, invoice_not_issued · 429 çok sık istek

invoices.mark_sent

Gönderildi işaretle — Faturanın kişiye ulaştığını kaydeder.

Gereken izin invoices:write · veriyi değiştirir

POSThttps://app.getera.io/api/v1/invoices/{id}/actions/mark_sent
API anahtarı ya da OAuth token · invoices:write
  • Asıl adres: POST /api/v1/actions/invoices.mark_sent

Girdi

AlanTürZorunluAçıklama
iduuidevetDoldurulduğu yer: adresteki {id} · Fatura · kimliği: invoice

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
invoice_not_foundFatura bulunmalı.
invoice_not_issuedYalnızca kesilmiş fatura gönderilir.

Yayımladığı olaylar: invoices.sent

Neye yazar: invoice (update) — Stamps when it was sent; invoice_event (insert) — Records the send

curl -X POST https://app.getera.io/api/v1/invoices/INVOICE_ID/actions/mark_sent \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "invoices.sent"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.invoices.markSent("INVOICE_ID")
era invoices mark_sent INVOICE_ID
tools/call
{
  "name": "era__invoices__mark_sent",
  "arguments": {
    "id": "INVOICE_ID"
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde invoices:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 invoice_not_found, invoice_not_issued · 429 çok sık istek

invoices.raise_notices

Fatura hatırlatmalarını oluştur — Günlük iş: vadesi yaklaşan ve geçen her kesilmiş fatura bir kez bildirilir.

Gereken izin invoices:write · veriyi değiştirir

Era’nın kendi çalıştırdığı bir işlem. Başvuru eksiksiz olsun diye listelenir; API anahtarı ya da token ile istek reddedilir (403 machine_only).
POSThttps://app.getera.io/api/v1/invoices/actions/raise_notices
API anahtarı ya da OAuth token · invoices:write
  • Asıl adres: POST /api/v1/actions/invoices.raise_notices

Girdi

AlanTürZorunluAçıklama
asOfdateGeçerlilik tarihi

Yayımladığı olaylar: invoices.due_soon, invoices.overdue

Neye yazar: invoice (update) — Records that the reminder was raised (due soon / overdue)

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde invoices:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 429 çok sık istek

invoices.send

E-postayla gönder — Faturayı bildirimler modülü üzerinden e-postayla gönderir; kayıt, gidip gitmediğini gösterir.

Gereken izin invoices:write · dışarıya ulaşır (gönderir, yayımlar ya da ücret alır) · Era çalıştırırken bir kişiye onaylatır

POSThttps://app.getera.io/api/v1/invoice_events/actions/send
API anahtarı ya da OAuth token · invoices:write
  • Asıl adres: POST /api/v1/actions/invoices.send

Girdi

AlanTürZorunluAçıklama
iduuidevetFatura · kimliği: invoice
tostringE-posta · en çok 320
messagestringMesaj · en çok 4000

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
invoice_not_foundFatura bulunmalı.
invoice_not_issuedYalnızca kesilmiş fatura gönderilir.
invoice_recipient_missingGönderilecek bir adres olmalı.

Yayımladığı olaylar: invoices.send_requested

Neye yazar: invoice_event (insert) — Records who it was sent to

curl -X POST https://app.getera.io/api/v1/invoice_events/actions/send \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"id":"INVOICE_ID"}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "invoices.send_requested"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.invoiceEvents.send({
  id: "INVOICE_ID"
})
era invoice_events send \
  --id "INVOICE_ID"
tools/call
{
  "name": "era__invoices__send",
  "arguments": {
    "id": "INVOICE_ID"
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde invoices:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 invoice_not_found, invoice_not_issued, invoice_recipient_missing · 429 çok sık istek

invoices.settle_from_agreement

Sözleşmeden kapat — Otomatik: finans tamamını tahsil ettiğinde sözleşmenin kesilmiş faturasını ödendi işaretler.

Gereken izin invoices:write · veriyi değiştirir

Era’nın kendi çalıştırdığı bir işlem. Başvuru eksiksiz olsun diye listelenir; API anahtarı ya da token ile istek reddedilir (403 machine_only).
POSThttps://app.getera.io/api/v1/invoice_events/actions/settle_from_agreement
API anahtarı ya da OAuth token · invoices:write
  • Asıl adres: POST /api/v1/actions/invoices.settle_from_agreement

Girdi

AlanTürZorunluAçıklama
agreementIduuidevetSözleşme · kimliği: agreement

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
invoice_not_issuedSözleşmenin kesilmiş bir faturası olmalı.
invoice_not_fully_collectedSözleşme tamamen tahsil edilmiş olmalı.

Yayımladığı olaylar: invoices.paid

Neye yazar: invoice (update) — Marks it paid; invoice_event (insert) — Records the settlement

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde invoices:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 invoice_not_issued, invoice_not_fully_collected · 429 çok sık istek

invoices.update_draft

Taslak faturayı düzenle — Satırları, vade tarihini veya notları değiştirir — yalnızca taslakken.

Gereken izin invoices:write · veriyi değiştirir

POSThttps://app.getera.io/api/v1/invoices/{id}/actions/update_draft
API anahtarı ya da OAuth token · invoices:write
  • Asıl adres: POST /api/v1/actions/invoices.update_draft

Girdi

AlanTürZorunluAçıklama
iduuidevetDoldurulduğu yer: adresteki {id} · Fatura · kimliği: invoice
dueDatedateSon tarih
notesstringNotlar · en çok 4000
taxCountrystringVergi ülkesi · en çok 2
linesobject / arrayKalemler

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
invoice_not_foundFatura bulunmalı.
invoice_not_draftYalnızca taslak düzenlenir.
invoice_needs_linesFaturanın en az bir satırı olmalı.
invalid_invoice_linesHer satırın bir açıklaması, pozitif bir miktarı ve fiyatı olmalı.

Yayımladığı olaylar: invoices.updated

Neye yazar: invoice (update) — Updates the header and totals; invoice_line (upsert) — Rewrites the lines; invoice_event (insert) — Records the edit

curl -X POST https://app.getera.io/api/v1/invoices/INVOICE_ID/actions/update_draft \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"dueDate":"2026-11-02"}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "invoices.updated"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.invoices.updateDraft("INVOICE_ID", {
  dueDate: "2026-11-02"
})
era invoices update_draft INVOICE_ID \
  --due-date "2026-11-02"
tools/call
{
  "name": "era__invoices__update_draft",
  "arguments": {
    "id": "INVOICE_ID",
    "dueDate": "2026-11-02"
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde invoices:write izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 invoice_not_found, invoice_not_draft, invoice_needs_lines, invalid_invoice_lines · 429 çok sık istek

invoices.void

Faturayı iptal et — Bir taslağı veya ödenmemiş kesilmiş faturayı geri çeker. Numarası kullanılmış kalır.

Gereken izin invoices:manage · siler ya da geri alınamaz · Era çalıştırırken bir kişiye onaylatır

POSThttps://app.getera.io/api/v1/invoices/{id}/actions/void
API anahtarı ya da OAuth token · invoices:manage
  • Asıl adres: POST /api/v1/actions/invoices.void

Girdi

AlanTürZorunluAçıklama
iduuidevetDoldurulduğu yer: adresteki {id} · Fatura · kimliği: invoice
reasonstringevetNeden · en çok 2000

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
invoice_not_foundFatura bulunmalı.
invoice_already_voidBir fatura bir kez iptal edilir.
invoice_paid_needs_credit_noteÖdenmiş bir fatura iptal edilmez, iade faturası kesilir.

Yayımladığı olaylar: invoices.voided

Neye yazar: invoice (update) — Marks it void; invoice_event (insert) — Records why

curl -X POST https://app.getera.io/api/v1/invoices/INVOICE_ID/actions/void \
  -H "Authorization: Bearer $ERA_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"reason":"Reason"}'
Yanıt
{
  "ok": true,
  "result": "…",
  "events": [
    "invoices.voided"
  ]
}
import { createEra } from "@getera/sdk"

const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.invoices.void("INVOICE_ID", {
  reason: "Reason"
})
era invoices void INVOICE_ID \
  --reason "Reason"
tools/call
{
  "name": "era__invoices__void",
  "arguments": {
    "id": "INVOICE_ID",
    "reason": "Reason"
  }
}

Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde invoices:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 invoice_not_found, invoice_already_void, invoice_paid_needs_credit_note · 429 çok sık istek

Veri modelleri

InvoiceAttachment

Tablo invoice_attachment · Kaynak invoice_attachments

  • GET /api/v1/invoice_attachments
  • GET /api/v1/invoice_attachments/{id}
SütunTürBoş olabilirİzin verilen değerlerBağlı olduğu tablo
idstring (uuid) · uuid
organization_idstring (uuid) · uuidorganization
workspace_idstring (uuid) · uuidworkspace
invoice_idstring (uuid) · uuidinvoice
file_idstring (uuid) · uuidfile
added_by_user_idstring (uuid) · uuidevetapp_user
created_atstring (date-time) · timestamptz

Birincil anahtar: id

Tekil: invoice_id, file_id

InvoiceEvent

Tablo invoice_event · Kaynak invoice_events

  • GET /api/v1/invoice_events
  • GET /api/v1/invoice_events/{id}
SütunTürBoş olabilirİzin verilen değerlerBağlı olduğu tablo
idstring (uuid) · uuid
organization_idstring (uuid) · uuidorganization
workspace_idstring (uuid) · uuidworkspace
invoice_idstring (uuid) · uuidinvoice
typestring · textcreated, updated, issued, sent, paid, voided, credited, note_added, attachment_added, attachment_removed, send_requested
messagestring · textevet
parametersobject · jsonb
actor_user_idstring (uuid) · uuidevetapp_user
occurred_atstring (date-time) · timestamptz

Birincil anahtar: id

InvoiceLine

Tablo invoice_line · Kaynak invoice_lines

  • GET /api/v1/invoice_lines
  • GET /api/v1/invoice_lines/{id}
SütunTürBoş olabilirİzin verilen değerlerBağlı olduğu tablo
idstring (uuid) · uuid
organization_idstring (uuid) · uuidorganization
workspace_idstring (uuid) · uuidworkspace
invoice_idstring (uuid) · uuidinvoice
descriptionstring · text
quantitystring (decimal) · numeric
item_modulestring · textevet
item_record_idstring (uuid) · uuidevet
currencystring · bpcharen çok 3
unit_amountstring (int64) · int8
discount_amountstring (int64) · int8
tax_class_idstring (uuid) · uuidevettax_class
tax_class_namestring · textevet
tax_ratestring (decimal) · numeric
prices_entered_with_taxboolean · bool
net_amountstring (int64) · int8
tax_amountstring (int64) · int8
total_amountstring (int64) · int8
display_orderinteger · int4
created_atstring (date-time) · timestamptz

Birincil anahtar: id

Denetimler:

  • CHECK ((currency ~ '^[A-Z]{3}$'::text))
  • CHECK ((discount_amount >= 0))
  • CHECK ((net_amount >= 0))
  • CHECK ((quantity > (0)::numeric))
  • CHECK ((tax_amount >= 0))
  • CHECK (((tax_rate >= (0)::numeric) AND (tax_rate <= (100)::numeric)))
  • CHECK ((total_amount >= 0))
  • CHECK ((unit_amount >= 0))

Invoice

Tablo invoice · Kaynak invoices

  • GET /api/v1/invoices
  • GET /api/v1/invoices/{id}
SütunTürBoş olabilirİzin verilen değerlerBağlı olduğu tablo
idstring (uuid) · uuid
organization_idstring (uuid) · uuidorganization
workspace_idstring (uuid) · uuidworkspace
kindstring · textinvoice, credit_note
statusstring · textdraft, issued, paid, void
numberstring · textevet
customer_idstring (uuid) · uuidcustomer
agreement_idstring (uuid) · uuidevetagreement
credited_invoice_idstring (uuid) · uuidevetinvoice
source_modulestring · textevet
source_record_idstring (uuid) · uuidevet
currencystring · bpcharen çok 3
subtotal_amountstring (int64) · int8
discount_total_amountstring (int64) · int8
tax_total_amountstring (int64) · int8
total_amountstring (int64) · int8
billing_namestring · textevet
billing_emailstring · textevet
billing_addressstring · textevet
tax_countrystring · bpchareveten çok 2
issue_datestring (date) · dateevet
due_datestring (date) · dateevet
issued_atstring (date-time) · timestamptzevet
sent_atstring (date-time) · timestamptzevet
paid_atstring (date-time) · timestamptzevet
voided_atstring (date-time) · timestamptzevet
void_reasonstring · textevet
notesstring · textevet
external_urlstring · textevet
created_by_user_idstring (uuid) · uuidevetapp_user
created_atstring (date-time) · timestamptz
updated_atstring (date-time) · timestamptz
due_notice_atstring (date-time) · timestamptzevet
overdue_notice_atstring (date-time) · timestamptzevet

Birincil anahtar: id

Denetimler:

  • CHECK (((kind <> 'credit_note'::text) OR (credited_invoice_id IS NOT NULL)))
  • CHECK ((currency ~ '^[A-Z]{3}$'::text))
  • CHECK ((discount_total_amount >= 0))
  • CHECK (((status = ANY (ARRAY['draft'::text, 'void'::text])) OR (number IS NOT NULL)))
  • CHECK ((subtotal_amount >= 0))
  • CHECK (((tax_country IS NULL) OR (tax_country ~ '^[A-Z]{2}$'::text)))
  • CHECK ((tax_total_amount >= 0))
  • CHECK ((total_amount >= 0))
  • CHECK (((status <> 'void'::text) OR (void_reason IS NOT NULL)))

Olaylar

İş akışları ve webhook'lar bu olaylara tepki verir.

OlayNe olurTaşıdığı alanlar
invoices.attachments_changedBir faturanın dosyaları değişti.id
invoices.credit_note_issuedBir iade faturası kesildi.id, number, creditedInvoiceId
invoices.draft_createdTaslak bir fatura başlatıldı.id, customerId, agreementId
invoices.due_soonKesilmiş bir faturanın vadesi yaklaşıyor.id, number, customerId, customerName, email, totalAmount, currency, totalText, dueDate, ownerUserId, daysUntilDue
invoices.issuedBir fatura numaralandı ve kesildi.id, number, customerId, agreementId, totalAmount, currency
invoices.note_addedBir faturaya not eklendi.id
invoices.overdueKesilmiş bir faturanın vadesi ödenmeden geçti.id, number, customerId, customerName, email, totalAmount, currency, totalText, dueDate, ownerUserId, daysOverdue
invoices.paidBir fatura ödendi.id, agreementId
invoices.send_requestedBir fatura e-postayla gönderildi; bildirimler teslim eder.id, eventId, to, subject, text
invoices.sentBir fatura gönderildi.id
invoices.updatedTaslak bir fatura düzenlendi.id
invoices.voidedBir fatura iptal edildi.id, agreementId
Bu sayfa yardımcı oldu mu?