# Sąskaitos faktūros

> Sąskaitos faktūros modelis, sąskaitų tipai, numeracija ir serijos, kūrimo ir atnaujinimo užklausos bei PDF atsisiuntimas.

Sąskaita faktūra F-sąskaita sistemoje – tai užbaigtas, sunumeruotas dokumentas, kurį jūsų verslas (**pardavėjas**) išrašo **pirkėjui**, su viena ar daugiau **eilučių** (`products`) ir neprivalomais **mokėjimo būdais**. API mato tik užbaigtas sąskaitas; programėlėje sukurti juodraščiai čia nematomi.

## Galiniai taškai

| Metodas | Kelias | Aprašymas |
|---|---|---|
| `GET` | [`/invoices`](/lt/reference/invoices/listInvoices/) | List invoices |
| `POST` | [`/invoices`](/lt/reference/invoices/createInvoice/) | Create an invoice |
| `GET` | [`/invoices/{invoice}`](/lt/reference/invoices/getInvoice/) | Get an invoice |
| `DELETE` | [`/invoices/{invoice}`](/lt/reference/invoices/deleteInvoice/) | Delete an invoice |
| `PUT` | [`/invoices/{invoice}`](/lt/reference/invoices/updateInvoice/) | Replace an invoice |
| `GET` | [`/invoices/{invoice}/download`](/lt/reference/invoices/downloadInvoicePdf/) | Download the invoice PDF |

## Sąskaitų tipai

| `type` | PVM | Naudojimas |
|---|---|---|
| `regular_invoice` | ne | Standartinė sąskaita ne PVM mokėtojui |
| `vat_invoice` | taip | PVM sąskaita faktūra |
| `preliminary_invoice` | ne | Išankstinė sąskaita |
| `preliminary_vat_invoice` | taip | Išankstinė sąskaita su PVM |
| `credit_invoice` | ne | Kreditinė sąskaita |
| `credit_vat_invoice` | taip | Kreditinė sąskaita su PVM |

PVM tipams kiekvienoje eilutėje privalomas `vat_percentage` ir pardavėjo PVM kodas. Kai pardavėju naudojate savo profilį, PVM kodas imamas iš profilio.

## Serijos ir numeracija

Kiekviena sąskaita priklauso **serijai** – trumpam kodui, tokiam kaip `SF`, – ir turi numerį, unikalų toje jūsų verslo serijoje.

- Kurdami nenurodykite `invoice_number`, ir API priskirs kitą serijos numerį. Dar neegzistuojanti serija pradedama nuo `1`.
- Nurodykite `invoice_number` aiškiai, kai numeraciją valdote patys. Jis privalo būti unikalus serijoje. Užpildyta nuliais (`"007"`) ir neužpildyta (`"7"`) formos lyginamos tiksliai taip, kaip išsiųstos, todėl vienoje serijoje naudokite vieną formą.
- **Atnaujindami visada siųskite dabartinį `invoice_number`.** Atnaujinimas be jo priskiria naują numerį iš serijos skaitiklio.
- Atsakymuose numeris grąžinamas užpildytas nuliais iki trijų skaitmenų (`"7"` grąžinamas kaip `"007"`).

## Sukurkite sąskaitą faktūrą

Trumpiausia naudinga užklausa pardavėju naudoja jūsų profilį, o kainas nurodo eilutėse:

```bash tab="cURL" tab-group="request"
curl -X POST https://app.fsaskaita.lt/api/invoices \
  -H "Authorization: Bearer $FSASKAITA_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d @- <<'JSON'
{
  "type": "vat_invoice",
  "invoice_date": "2026-09-08",
  "pay_until_date": "2026-09-22",
  "series": "SF",
  "currency": "EUR",
  "language": "lt",
  "use_default_seller_info": true,
  "buyer": {
    "type": "company",
    "company_name": "Pirkėjas, UAB",
    "company_code": "300000001",
    "vat_code": "LT100000000011",
    "address": "Konstitucijos pr. 7, Vilnius",
    "email": "buhalterija@pirkejas.lt"
  },
  "products": [
    { "name": "Konsultacija", "units": "val.", "quantity": 2, "price": 50, "vat_percentage": 21 }
  ],
  "payment_options": [
    { "type": "bank", "bank_name": "Swedbank", "bank_account": "LT12 7300 0100 0000 0001", "swift_bic_code": "HABALT22" }
  ]
}
JSON
```

```js tab="JavaScript" tab-group="request"
const response = await fetch('https://app.fsaskaita.lt/api/invoices', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.FSASKAITA_TOKEN}`,
    Accept: 'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    type: 'vat_invoice',
    invoice_date: '2026-09-08',
    pay_until_date: '2026-09-22',
    series: 'SF',
    currency: 'EUR',
    language: 'lt',
    use_default_seller_info: true,
    buyer: {
      type: 'company',
      company_name: 'Pirkėjas, UAB',
      company_code: '300000001',
      vat_code: 'LT100000000011',
      address: 'Konstitucijos pr. 7, Vilnius',
      email: 'buhalterija@pirkejas.lt',
    },
    products: [
      { name: 'Konsultacija', units: 'val.', quantity: 2, price: 50, vat_percentage: 21 },
    ],
    payment_options: [
      { type: 'bank', bank_name: 'Swedbank', bank_account: 'LT12 7300 0100 0000 0001', swift_bic_code: 'HABALT22' },
    ],
  }),
});

console.log(response.status, await response.json());
```

```go tab="Go" tab-group="request"
package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
	"strings"
)

const invoice = `{
  "type": "vat_invoice",
  "invoice_date": "2026-09-08",
  "pay_until_date": "2026-09-22",
  "series": "SF",
  "currency": "EUR",
  "language": "lt",
  "use_default_seller_info": true,
  "buyer": {
    "type": "company",
    "company_name": "Pirkėjas, UAB",
    "company_code": "300000001",
    "vat_code": "LT100000000011",
    "address": "Konstitucijos pr. 7, Vilnius",
    "email": "buhalterija@pirkejas.lt"
  },
  "products": [
    { "name": "Konsultacija", "units": "val.", "quantity": 2, "price": 50, "vat_percentage": 21 }
  ],
  "payment_options": [
    { "type": "bank", "bank_name": "Swedbank", "bank_account": "LT12 7300 0100 0000 0001", "swift_bic_code": "HABALT22" }
  ]
}`

func main() {
	req, _ := http.NewRequest("POST", "https://app.fsaskaita.lt/api/invoices", strings.NewReader(invoice))
	req.Header.Set("Authorization", "Bearer "+os.Getenv("FSASKAITA_TOKEN"))
	req.Header.Set("Accept", "application/json")
	req.Header.Set("Content-Type", "application/json")

	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()

	body, _ := io.ReadAll(res.Body)
	fmt.Println(res.Status, string(body))
}
```

```python tab="Python" tab-group="request"
import os

import requests

response = requests.post(
    "https://app.fsaskaita.lt/api/invoices",
    headers={
        "Authorization": f"Bearer {os.environ['FSASKAITA_TOKEN']}",
        "Accept": "application/json",
    },
    json={
        "type": "vat_invoice",
        "invoice_date": "2026-09-08",
        "pay_until_date": "2026-09-22",
        "series": "SF",
        "currency": "EUR",
        "language": "lt",
        "use_default_seller_info": True,
        "buyer": {
            "type": "company",
            "company_name": "Pirkėjas, UAB",
            "company_code": "300000001",
            "vat_code": "LT100000000011",
            "address": "Konstitucijos pr. 7, Vilnius",
            "email": "buhalterija@pirkejas.lt",
        },
        "products": [
            {"name": "Konsultacija", "units": "val.", "quantity": 2, "price": 50, "vat_percentage": 21},
        ],
        "payment_options": [
            {"type": "bank", "bank_name": "Swedbank", "bank_account": "LT12 7300 0100 0000 0001", "swift_bic_code": "HABALT22"},
        ],
    },
)

print(response.status_code, response.json())
```

```java tab="Java" tab-group="request"
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class CreateInvoice {
    public static void main(String[] args) throws Exception {
        String invoice = """
            {
              "type": "vat_invoice",
              "invoice_date": "2026-09-08",
              "pay_until_date": "2026-09-22",
              "series": "SF",
              "currency": "EUR",
              "language": "lt",
              "use_default_seller_info": true,
              "buyer": {
                "type": "company",
                "company_name": "Pirkėjas, UAB",
                "company_code": "300000001",
                "vat_code": "LT100000000011",
                "address": "Konstitucijos pr. 7, Vilnius",
                "email": "buhalterija@pirkejas.lt"
              },
              "products": [
                { "name": "Konsultacija", "units": "val.", "quantity": 2, "price": 50, "vat_percentage": 21 }
              ],
              "payment_options": [
                { "type": "bank", "bank_name": "Swedbank", "bank_account": "LT12 7300 0100 0000 0001", "swift_bic_code": "HABALT22" }
              ]
            }
            """;

        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://app.fsaskaita.lt/api/invoices"))
            .header("Authorization", "Bearer " + System.getenv("FSASKAITA_TOKEN"))
            .header("Accept", "application/json")
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(invoice))
            .build();

        HttpResponse<String> response = HttpClient.newHttpClient()
            .send(request, HttpResponse.BodyHandlers.ofString());

        System.out.println(response.statusCode() + " " + response.body());
    }
}
```

```csharp tab="C#" tab-group="request"
using System.Net.Http.Headers;
using System.Text;

var invoice = """
    {
      "type": "vat_invoice",
      "invoice_date": "2026-09-08",
      "pay_until_date": "2026-09-22",
      "series": "SF",
      "currency": "EUR",
      "language": "lt",
      "use_default_seller_info": true,
      "buyer": {
        "type": "company",
        "company_name": "Pirkėjas, UAB",
        "company_code": "300000001",
        "vat_code": "LT100000000011",
        "address": "Konstitucijos pr. 7, Vilnius",
        "email": "buhalterija@pirkejas.lt"
      },
      "products": [
        { "name": "Konsultacija", "units": "val.", "quantity": 2, "price": 50, "vat_percentage": 21 }
      ],
      "payment_options": [
        { "type": "bank", "bank_name": "Swedbank", "bank_account": "LT12 7300 0100 0000 0001", "swift_bic_code": "HABALT22" }
      ]
    }
    """;

using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
    "Bearer", Environment.GetEnvironmentVariable("FSASKAITA_TOKEN"));
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

var response = await client.PostAsync(
    "https://app.fsaskaita.lt/api/invoices",
    new StringContent(invoice, Encoding.UTF8, "application/json"));
Console.WriteLine($"{(int)response.StatusCode} {await response.Content.ReadAsStringAsync()}");
```

Pagrindinės taisyklės:

- `buyer.type` yra `company` arba `individual`. Įmonėms reikia `company_name`; fiziniams asmenims naudojami `first_name` ir `last_name`. Nesiųskite įmonės laukų fiziniam asmeniui ar asmens vardų įmonei.
- Kiekvienai eilutei reikia `name`, `units`, `quantity` ir **lygiai vieno** iš `price` (vieneto kaina be PVM), `total` (eilutės suma be PVM) arba `total_incl_vat`. Kitus serveris apskaičiuoja pats.
- `payment_options` įrašai yra arba `type: "bank"` su `bank_account` ir `bank_name` (bei neprivalomais `routing_or_sort_number`, `swift_bic_code`), arba `type: "other"` su `fields` sąrašu iš `{ "label", "value" }` porų.
- `payment_status` kuriant pagal nutylėjimą yra `not_paid`, o atnaujinant nenurodytas paliekamas nepakeistas. Nustatykite `"paid"`, kad pažymėtumėte sąskaitą apmokėta.
- `language` (`lt`, `en`, `es`, `de`, `fr`) nustato PDF kalbą. Pagal nutylėjimą `lt`.
- `notes` – laisvas tekstas iki 255 simbolių, spausdinamas sąskaitoje.

### Savo pardavėjo bloko pateikimas

Nustatykite `use_default_seller_info` į `false` (arba nenurodykite) ir siųskite `seller`. Privalomi pardavėjo laukai priklauso nuo to, kaip registruotas jūsų verslas: įmonės siunčia `company_name` ir `company_code`; individuali veikla siunčia `first_name`, `last_name` ir `individual_activity_id`. PVM tipams papildomai privalomas `seller.vat_code`. `seller.custom_fields` priima papildomas `{ "label", "value" }` poras, spausdinamas po pardavėjo duomenimis.

## Atsakymas

```json
{
  "data": {
    "id": "6f1e9d2a-0b3c-4e5f-8a9b-1c2d3e4f5a6b",
    "business_id": "9c1f7b2e-3a6d-4d5e-9f0a-2b7c8d9e0f11",
    "invoice_type": "vat_invoice",
    "series": "SF",
    "invoice_number": "007",
    "invoice_date": "2026-09-08",
    "pay_until_date": "2026-09-22",
    "language": "lt",
    "subtotal": 100,
    "vat": 21,
    "total_incl_vat": 121,
    "currency": "EUR",
    "payment_status": "not_paid",
    "notes": null,
    "share_link": "https://app.fsaskaita.lt/invoice/share/…",
    "seller": { "business_type": "small_partnership", "company_name": "Pavyzdys, MB", "…": "…", "custom_fields": [] },
    "buyer": { "type": "company", "company_name": "Pirkėjas, UAB", "…": "…" },
    "items": [
      { "id": "…", "name": "Konsultacija", "price": 50, "vat_percentage": 21, "quantity": 2, "units": "val." }
    ],
    "payment_options": [
      { "type": "bank", "bank_account": "LT12 7300 0100 0000 0001", "bank_name": "Swedbank", "routing_or_sort_number": null, "swift_bic_code": "HABALT22", "fields": [] }
    ],
    "created_at": 1757318400,
    "updated_at": 1757318400
  }
}
```

`share_link` – viešas puslapis, kuriame pirkėjas gali peržiūrėti ir atsisiųsti sąskaitą neprisijungęs. `items[].price` yra vieneto kaina be PVM; eilučių sumos negrąžinamos.

## Atnaujinkite sąskaitą faktūrą

`PUT /invoices/{id}` priima tokį patį turinį kaip kūrimas ir pakeičia visas sąskaitos dalis: eilutes, mokėjimo būdus ir pardavėjo bloką. Pirmiausia nuskaitykite sąskaitą, pakeiskite reikiamus laukus ir išsiųskite visą dokumentą atgal kartu su jo `invoice_number`. Pakeitus `series`, sąskaita perkeliama į kitą seriją ir iš naujo sinchronizuojami abiejų serijų skaitikliai.

## Atsisiųskite PDF

```bash tab="cURL" tab-group="request"
curl -L https://app.fsaskaita.lt/api/invoices/$ID/download \
  -H "Authorization: Bearer $FSASKAITA_TOKEN" \
  -H "Accept: application/json" \
  -o invoice.pdf
```

```js tab="JavaScript" tab-group="request"
import { createWriteStream } from 'node:fs';
import { Readable } from 'node:stream';
import { pipeline } from 'node:stream/promises';

const id = '6f1e9d2a-0b3c-4e5f-8a9b-1c2d3e4f5a6b';
const response = await fetch(`https://app.fsaskaita.lt/api/invoices/${id}/download`, {
  headers: {
    Authorization: `Bearer ${process.env.FSASKAITA_TOKEN}`,
    Accept: 'application/json',
  },
});
if (!response.ok) throw new Error(`${response.status} ${await response.text()}`);

await pipeline(Readable.fromWeb(response.body), createWriteStream('invoice.pdf'));
```

```go tab="Go" tab-group="request"
package main

import (
	"io"
	"net/http"
	"os"
)

func main() {
	id := "6f1e9d2a-0b3c-4e5f-8a9b-1c2d3e4f5a6b"
	req, _ := http.NewRequest("GET", "https://app.fsaskaita.lt/api/invoices/"+id+"/download", nil)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("FSASKAITA_TOKEN"))
	req.Header.Set("Accept", "application/json")

	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	if res.StatusCode != http.StatusOK {
		body, _ := io.ReadAll(res.Body)
		panic(res.Status + " " + string(body))
	}

	file, err := os.Create("invoice.pdf")
	if err != nil {
		panic(err)
	}
	defer file.Close()

	if _, err := io.Copy(file, res.Body); err != nil {
		panic(err)
	}
}
```

```python tab="Python" tab-group="request"
import os

import requests

invoice_id = "6f1e9d2a-0b3c-4e5f-8a9b-1c2d3e4f5a6b"

with requests.get(
    f"https://app.fsaskaita.lt/api/invoices/{invoice_id}/download",
    headers={
        "Authorization": f"Bearer {os.environ['FSASKAITA_TOKEN']}",
        "Accept": "application/json",
    },
    stream=True,
) as response:
    response.raise_for_status()
    with open("invoice.pdf", "wb") as file:
        for chunk in response.iter_content(chunk_size=65536):
            file.write(chunk)
```

```java tab="Java" tab-group="request"
import java.io.InputStream;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;

public class DownloadInvoice {
    public static void main(String[] args) throws Exception {
        String id = "6f1e9d2a-0b3c-4e5f-8a9b-1c2d3e4f5a6b";
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://app.fsaskaita.lt/api/invoices/" + id + "/download"))
            .header("Authorization", "Bearer " + System.getenv("FSASKAITA_TOKEN"))
            .header("Accept", "application/json")
            .GET()
            .build();

        HttpResponse<InputStream> response = HttpClient.newHttpClient()
            .send(request, HttpResponse.BodyHandlers.ofInputStream());

        try (InputStream body = response.body()) {
            if (response.statusCode() != 200) {
                throw new IllegalStateException(response.statusCode() + " " + new String(body.readAllBytes()));
            }
            Files.copy(body, Path.of("invoice.pdf"), StandardCopyOption.REPLACE_EXISTING);
        }
    }
}
```

```csharp tab="C#" tab-group="request"
using System.Net.Http.Headers;

var id = "6f1e9d2a-0b3c-4e5f-8a9b-1c2d3e4f5a6b";

using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
    "Bearer", Environment.GetEnvironmentVariable("FSASKAITA_TOKEN"));
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

using var response = await client.GetAsync(
    $"https://app.fsaskaita.lt/api/invoices/{id}/download",
    HttpCompletionOption.ResponseHeadersRead);
response.EnsureSuccessStatusCode();

await using var file = File.Create("invoice.pdf");
await response.Content.CopyToAsync(file);
```

Atsakymas yra `application/pdf` su `Content-Disposition: attachment` failo pavadinimu, sudarytu iš tipo pavadinimo, serijos ir numerio. Jei PDF dar neparengtas, atsisiuntimas jo laukia iki maždaug 20 sekundžių. `Content-Length` antraštės nėra, todėl skaitykite turinį srautu, o ne iš anksto rezervuokite atmintį.

## Ko tikėtis: šalutiniai efektai

- Kūrimas arba atnaujinimas išsiunčia `invoice.created` arba `invoice.updated` [webhook pranešimą](/lt/guides/webhooks). Šalinimas išsiunčia `invoice.deleted`.
- Pirkėjas išsaugomas jūsų klientų sąraše programėlėje.
- API prieigai reikalingas Premium planas.
