> For the complete documentation index, see [llms.txt](https://api-docs.toconline.pt/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://api-docs.toconline.pt/apis/vendas/recibos-de-venda.md).

# Recibos de Venda

### Criar Cabeçalho Recibo de Venda <a href="#criacao-de-cabecalhos-e-linhas" id="criacao-de-cabecalhos-e-linhas"></a>

{% openapi src="/files/LrXEg3IjIacAycCz7IWE" path="/api/v1/commercial\_sales\_receipts" method="post" %}
[TOConline Open API.yaml](https://1863668386-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fk7sif7BY0rPzivMcj1HB%2Fuploads%2Fgit-blob-1f7bd9dd692716d3f3f93d9c9a4f7226d78277e3%2FTOConline%20Open%20API.yaml?alt=media)
{% endopenapi %}

```json
{ 
    "date": "2020-06-01",                          // [OPCIONAL] Data do recibo; por omissão, a data do pedido
    "payment_mechanism": "MO",                     // [OPCIONAL] Por omissão, "MO". Meios de pagamento aceites: "MO": Numerário, "CH": Cheque, "DC": Cartão de débito, "CC": Cartão de crédito, "TR": Transferência bancária, "DDA": Débito direto autorizado, "MB": Referências de pagamento Multibanco.                                             
    // [OPCIONAL] Recursos associados ao recibo. Caso nenhum seja indicado, os restantes devem atributos devem ser omitidos. Caso contrário, todos os atributos devem ser preenchidos.
    "commercial_document_series_id": 1,            // [OBRIGATÓRIO] Série de recibos associada. Não precisa de ser indicada; por omissão o recibo é criado na série por omissão associada ao tipo de documento. Vd. NOTA 1
    "bank_account_id": 2,                          // [OBRIGATÓRIO] Conta bancária da empresa para onde o recebimento é feito. Usado apenas quando o meio de pagamento é "DC", "CC", "TR" ou "DDA", e apenas se for necessário indicar uma conta bancária específica. Vd. NOTA 2
    "cash_account_id": 3,                          // [OBRIGATÓRIO] Conta de caixa da empresa para onde o recebimento é feito. Usado apenas quando o meio de pagamento é "MO", e apenas se for necessário indicar uma conta de caixa específica. Vd. NOTA 3
    "lines": [
        {
            "receivable_type": "Document",                              // [OBRIGATÓRIO]
            "receivable_id": "<id do documento a liquidar>",            // [OBRIGATÓRIO] Vd. NOTA 1
            "received_value": 50,                                       // [OBRIGATÓRIO] Valor total a receber (não é necessário receber a totalidade do documento, pode fazer-se um recebimento parcial)
            "settlement_percentage": "3"                                // [OPCIONAL] Desconto de pagamento, em percentagem; são suportados descontos compostos, como "3+5"
        }
    ]
}
```

{% hint style="info" %}
**Nota 1:** A série associada ao recibo tem já que existir, e o seu "id" interno deve ser obtido por um

{% code overflow="wrap" %}

```
GET /commercial_document_series?filter[document_type]=o tipo de documento> &filter[prefix]=<o prefixo da série> &filter[number]=<o numero da série>
```

{% endcode %}
{% endhint %}

{% hint style="info" %}
**Nota 2:** O "id" interno da conta bancária da empresa deve ser obtido por um

```
GET /company_bank_accounts?filter[iban]= <IBAN da conta> 
ou 
GET /company_bank_accounts?filter[name]= <nome da conta> 
```

{% endhint %}

{% hint style="info" %}
**Nota 3:** O "id" interno da conta de caixa da empresa deve ser obtido por um

```
GET /cash_accounts?filter[name]= <nome da conta>
```

{% endhint %}

### Criar Linhas de Recibo de Venda <a href="#criacao-de-cabecalhos-e-linhas" id="criacao-de-cabecalhos-e-linhas"></a>

{% openapi src="/files/LrXEg3IjIacAycCz7IWE" path="/api/commercial\_sales\_receipt\_lines" method="post" %}
[TOConline Open API.yaml](https://1863668386-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fk7sif7BY0rPzivMcj1HB%2Fuploads%2Fgit-blob-1f7bd9dd692716d3f3f93d9c9a4f7226d78277e3%2FTOConline%20Open%20API.yaml?alt=media)
{% endopenapi %}

### Anular Recibo de Venda <a href="#anulacao-de-um-recibo-caso-seja-preciso" id="anulacao-de-um-recibo-caso-seja-preciso"></a>

{% openapi src="/files/LrXEg3IjIacAycCz7IWE" path="/api/v1/commercial\_sales\_receipts/{salesReceiptId}/void" method="patch" %}
[TOConline Open API.yaml](https://1863668386-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fk7sif7BY0rPzivMcj1HB%2Fuploads%2Fgit-blob-1f7bd9dd692716d3f3f93d9c9a4f7226d78277e3%2FTOConline%20Open%20API.yaml?alt=media)
{% endopenapi %}

No pedido acima, o \<access\_token> corresponde ao token de acesso válido devolvido pelo serviço de OAuth

{% hint style="info" %}
**Nota 1:** O "id" interno do recibo a anular deve ser obtido por um

`GET /api/commercial_sales_receipts?filter[document_no]=<o número do recibo, ex. RC 2020/1>`
{% endhint %}

É na linha do recibo que se indica qual o documento (FT, ou outro) que foi pago.

Se necessário, pode criar-se mais do que uma linha (e nesse caso o recibo é emitido de uma só vez para todos os documentos referenciados)

### Edição do recibo, após criação <a href="#edicao-do-recibo-apos-criacao" id="edicao-do-recibo-apos-criacao"></a>

O seguinte pedido pode ser realizado, após a criação do recibo, e permite alterar informações sobre o mesmo. A estrutura do payload é a mesma do POST de criação. Neste, deverá enviar no id do pedido o id do recibo a alterar. Os atributos enviados no body irão substituir os guardados no momento, e cada linha enviada dentro de lines irá substituir os dados guardados na linha com id especificado em receipt\_line\_id

{% openapi src="/files/LrXEg3IjIacAycCz7IWE" path="/api/v1/commercial\_sales\_receipts/{salesReceiptId}" method="patch" %}
[TOConline Open API.yaml](https://1863668386-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fk7sif7BY0rPzivMcj1HB%2Fuploads%2Fgit-blob-1f7bd9dd692716d3f3f93d9c9a4f7226d78277e3%2FTOConline%20Open%20API.yaml?alt=media)
{% endopenapi %}

#### Exemplo:

{% tabs %}
{% tab title="Payload" %}
{% code title="Exemplo de Payload " %}

```json
{
    "date": "2024-02-24",
    "document_no": "RC 2023/1",
    "document_series_id": 66,
    "payment_mechanism": "MO",
    "gross_total": 10.69,
    "net_total": 9.25,
    "third_party_type": null,
    "third_party_id": null,
    "check_number": null,
    "currency_conversion_rate": 1,
    "internal_observations": "",
    "observations": "",
    "standalone": true,
    "saft_import_id": null,
    "deleted": true,
    "manual_registration_type": null,
    "manual_registration_series": null,
    "manual_registration_number": null,
    "created_at": "2024-02-23 11:49:25.209661",
    "updated_at": "2024-02-27 11:19:15.761393",
    "id": 2,
    "cash_account_id": 2,
    "company_id": 800000046,
    "country_id": 1,
    "currency_id": 1,
    "customer_id": 57,
    "user_id": 800000863,
    "lines": [
        {
            "receipt_id": 2,
            "receivable_type": "Document",
            "receivable_id": 12,
            "received_value": 10.69,
            "settlement_percentage": 0,
            "cashed_vat_amount": null,
            "gross_total": 11.38,
            "settlement_amount": 0.0,
            "net_total": 9.25,
            "retention_total": 0.69,
            "id": 2
        }
    ]
}
```

{% endcode %}
{% endtab %}

{% tab title="Response" %}
{% code title="Exemplo de Response" %}

```json
{
    "date": "2024-02-24",
    "document_no": "RC 2023/1",
    "document_series_id": 66,
    "payment_mechanism": "MO",
    "gross_total": 10.69,
    "net_total": 9.25,
    "third_party_type": null,
    "third_party_id": null,
    "check_number": null,
    "currency_conversion_rate": 1,
    "internal_observations": "",
    "observations": "",
    "standalone": true,
    "saft_import_id": null,
    "deleted": true,
    "manual_registration_type": null,
    "manual_registration_series": null,
    "manual_registration_number": null,
    "created_at": "2024-02-23 11:49:25.209661",
    "updated_at": "2024-02-27 14:03:24.085399",
    "id": 2,
    "cash_account_id": 2,
    "company_id": 800000046,
    "country_id": 1,
    "currency_id": 1,
    "customer_id": 57,
    "user_id": 800000863,
    "lines": [
        {
            "receipt_id": 2,
            "receivable_type": "Document",
            "receivable_id": 12,
            "received_value": 10.69,
            "settlement_percentage": 0,
            "cashed_vat_amount": null,
            "gross_total": 11.38,
            "settlement_amount": 0.0,
            "net_total": 9.25,
            "retention_total": 0.69,
            "id": 2
        }
    ]
}
```

{% endcode %}
{% endtab %}
{% endtabs %}

### Adição de Linha em Documento de Recibo de Venda <a href="#adicao-de-linhas" id="adicao-de-linhas"></a>

Caso pretenda adicionar novas linhas ao recibo, após a sua criação, pode utilizar a seguinte rota, que utiliza o mesmo payload das lines do pedido POST de criação.

{% openapi src="/files/LrXEg3IjIacAycCz7IWE" path="/api/commercial\_sales\_receipt\_lines" method="post" %}
[TOConline Open API.yaml](https://1863668386-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fk7sif7BY0rPzivMcj1HB%2Fuploads%2Fgit-blob-1f7bd9dd692716d3f3f93d9c9a4f7226d78277e3%2FTOConline%20Open%20API.yaml?alt=media)
{% endopenapi %}

No pedido acima, o \<access\_token> corresponde ao token de acesso válido devolvido pelo serviço de OAuth, e o \<payload JSON> deverá ter o seguinte formato

{% code title="Payload" %}

```json
{
  "data": {
    "type": "commercial_sales_receipt_lines",                     // [OBRIGATÓRIO]
    "attributes": {
      "receivable_type": "Document",                              // [OBRIGATÓRIO]
      "receivable_id": "<id do documento a liquidar>",            // [OBRIGATÓRIO] Vd. Nota 1
      "received_value": 50,                                       // [OBRIGATÓRIO] Valor total a receber (não é necessário receber a totalidade do documento, pode fazer-se um recebimento parcial)
      "settlement_percentage": "3"                                // [OPCIONAL] Desconto de pagamento, em percentagem; são suportados descontos compostos, como "3+5"
      "receipt_id" : "<id do recibo>"                            // [OBRIGATÓRIO] Recibo a que esta linha pertence. Este "id" é o devolvido na resposta ao pedido de criação do cabeçalho, ver acima
    }
  }
}
```

{% endcode %}

{% hint style="info" %}
**Nota 1:** O "id" interno do documento (fatura, nota) a receber deve ser obtido por um

{% code overflow="wrap" %}

```
GET /commercial_sales_documents?filter[document_no]=<o número do documento, ex. FT 2020/1>
```

{% endcode %}
{% endhint %}

{% hint style="success" %}
É na linha do recibo que se indica qual o documento (FT, ou outro) que foi pago.

Se necessário, pode criar-se mais do que uma linha (e nesse caso o recibo é emitido de uma só vez para todos os documentos referenciados)
{% endhint %}

### Remover Linha do Recibo de Venda

Do mesmo modo, caso pretenda remover linhas de um recibo, pode utilizar a seguinte rota, onde apenas tem de indicar o id da linha a remover, no path.

<mark style="color:red;">`DELETE`</mark> `/v1/commercial_sales_receipt_lines/{id}`

#### Path Parameters

| Name                                 | Type    | Description                      |
| ------------------------------------ | ------- | -------------------------------- |
| id<mark style="color:red;">\*</mark> | Integer | id of the receipt line to delete |

{% tabs %}
{% tab title="200: OK OK" %}

{% endtab %}
{% endtabs %}

### Obter Recibo de Venda por ID <a href="#consultar-recibo" id="consultar-recibo"></a>

Por fim, se pretender obter informações sobre um dado recibo pode utilizar a seguinte rota, onde deverá especificar o id do documento a analisar no path.

<mark style="color:blue;">`GET`</mark> `/v1/commercial_sales_receipts/{id}`

#### Path Parameters

| Name                                 | Type    | Description                                 |
| ------------------------------------ | ------- | ------------------------------------------- |
| id<mark style="color:red;">\*</mark> | integer | id of the receipt to get the information of |

{% tabs %}
{% tab title="200: OK OK" %}

{% endtab %}
{% endtabs %}
