Referência da API

Faturas

Faturas de fornecedores para compradores, da chegada à conciliação, aprovação e pagamento.

Mais sobre este recurso

A fatura de um fornecedor é criada ao transformar um pedido de compra (source: "po-flip") ou ao lançá-la para um comprador conectado (source: "manual", veja CreateInvoice), ou o fornecedor a envia do seu sistema de faturamento com uma chave de API (source: "feed", veja SubmitFeedInvoice) depois que esse comprador ativa as faturas automatizadas. Um comprador também pode registrar uma diretamente (source: "direct", veja SubmitInvoice), em JSON, cXML (InvoiceDetailRequest) ou UBL 2.1 (<Invoice>). Toda fatura fica no espaço de trabalho do comprador e passa por conciliação, aprovação e liquidação. Uma fatura fica "pending" quando há um valor de uso real para compará-la: um pedido de compra e uma conexão de faturamento ativa para o provedor do pedido, com uma fatura sincronizada. usageAmount, usageCurrency e tolerancePct só aparecem nesse caso, e no resultado "matched" ou "discrepancy". Caso contrário, ela fica "unverified", com unverifiedReason "no_purchase_order" ou "no_billing_connection" (só na visão do comprador; ausente em faturas mais antigas, que valem como "no_purchase_order"), ou "debit_note" para uma nota de débito sobre o pedido de um provedor de nuvem, que se soma a uma fatura já cobrada e por isso não pode ser comparada com a conta do mês. Quem chama como Fornecedor vê matchStatus como está, mas nunca unverifiedReason nem os campos de uso. Uma fatura não verificada nunca é conciliada nem aprovada automaticamente: uma pessoa a revisa com ResolveInvoiceDiscrepancy.

Listar faturas

Lista faturas e, opcionalmente, notas de crédito e de débito.

GET/v1/workspaces/{regionId}/invoices

Parâmetros

  • fromstring

    Data/timestamp ISO 8601 - só são retornados os itens criados nessa data ou depois dela.

  • tostring

    Data/timestamp ISO 8601 - só são retornados os itens criados nessa data ou antes dela.

  • documentTypestring

    Por padrão, o que é pago: faturas e as notas de débito que as alteram. invoice (só faturas), debit_note, credit_note (os mesmos itens de ListCreditNotes) ou all (todos os tipos, do mais recente para o mais antigo). Todo item traz documentType. Qualquer outro valor é 400 DOCUMENT_TYPE_INVALID.

Retorna

200 OK com o objeto mostrado na resposta.

Mais detalhes

Lista faturas, sem ordem definida - ou, com documentType, notas de crédito ou ambas: faturas e notas de crédito são um único recurso de documentos, e cada item diz qual é em documentType. Quem chama como Comprador recebe as faturas que o seu espaço de trabalho recebeu; quem chama como Fornecedor recebe as faturas que emitiu para compradores conectados, seja qual for o espaço de trabalho de comprador em que cada uma está. Opcionalmente restrito a um intervalo de createdAt via from/to - passe os limites de um mês do calendário para ter uma visão por mês. Quem chama como Fornecedor recebe uma visão reduzida de cada fatura (veja GetInvoice) - os detalhes internos de conciliação do comprador e o fluxo de aprovação completo ficam ocultos.

Erros

  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
  • 403 Forbidden - O token Bearer ou a chave de API de quem chama não dá acesso a este espaço de trabalho (regionId), ou não tem a função exigida.
GET /v1/workspaces/{regionId}/invoices
Requisição
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Resposta · 200 OK
[
   {
      "documentType": "invoice" | "debit_note",
      "amendsInvoiceId": "string",
      "amendsExternalInvoiceNumber": "string",
      "debitNoteIds": [ "string" ],
      "replacesInvoiceIds": [ "string" ],
      "replacedByInvoiceIds": [ "string" ],
      "replacement": { "creditedInFull": boolean, "uncredited": number },
      "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
      "id": "string",
      "po": "string",
      "poLineNo": number,
      "billsNoPoLine": true,
      "buyerOrgId": "string",
      "supplierOrgId": "string",
      "supplier": "string",
      "amount": number,
      "currency": "string",
      "usageAmount": number,
      "usageCurrency": "string",
      "tolerancePct": number,
      "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
      "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
      "discrepancyReason": "amount" | "currency",
      "paid": boolean,
      "dueInDays": number,
      "approval": {
         "requester": "string",
         "requesterEmployeeKey": "string",
         "groups": [
           {
             "id": "string",
             "mode": "sequential" | "parallel",
             "label": "string",
             "status": "pending" | "approved" | "rejected",
             "stages": [
               { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
             ]
           }
         ],
         "groupIndex": number,
         "status": "pending" | "approved" | "rejected",
         "history": [
           { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
         ],
         "autonomy": boolean,
         "selfApproved": boolean
       },
      "createdAt": "string",
      "lastRemindedAt": "string",
      "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
      "replacesInvoiceId": "string",
      "source": "po-flip" | "direct" | "manual" | "feed",
      "submittedFormat": "json" | "cxml" | "ubl",
      "submittedBy": "string",
      "externalInvoiceNumber": "string",
      "lineItems": [
         { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
      ],
      "adjustments": [
         { "type": "discount" | "charge", "description": "string", "amount": number }
      ],
      "taxAmount": number,
      "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
      "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
      "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
      "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
      "rateWarnings": [
         { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
      ],
      "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
      "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
      "invoiceKind": "prepayment",
      "creditNoteIds": [ "string" ],
      "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
      "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
      "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
   }
]

Obter fatura

Recupera uma fatura.

GET/v1/workspaces/{regionId}/invoices/{invoiceId}

Parâmetros

  • invoiceIdstringObrigatório

    O identificador da fatura, ou o de uma nota de crédito (CN-…).

  • buyerstring

    Só para quem chama como Fornecedor, e só necessário depois de um 409 *_ID_AMBIGUOUS: o ID do espaço de trabalho do comprador (terminado em .buyer) ou o id da região, da lista buyers do 409. Só o documento desse comprador é considerado; se não houver nenhum ali, é 404. Um ID de espaço de trabalho .supplier é 400 BUYER_QUALIFIER_INVALID ("The buyer parameter must be one buyer's Workspace ID (ending in .buyer), from the buyers list in the 409 response."). Ignorado para quem chama como Comprador.

Retorna

200 OK com o objeto mostrado na resposta.

Mais detalhes

Busca uma única fatura pelo id - ou, dado o id de uma nota de crédito (CN-…), essa nota de crédito, no formato de GetCreditNote; documentType diz qual é. Para quem chama como Comprador, regionId é o próprio espaço de trabalho da fatura. Para quem chama como Fornecedor, regionId é o próprio espaço de trabalho do fornecedor, e a fatura é procurada entre as faturas recebidas pela organização, seja qual for o espaço de trabalho de comprador que a emitiu - a mesma busca que ListSupplierWorkspace usa. GET …/invoices/{invoiceId}/pdf aceita o mesmo parâmetro de consulta buyer.

Campos da resposta

  • replacesInvoiceIdsArray<string>

    Crédito e refaturamento: as faturas e notas de débito que esta fatura substitui. Ausente quando não há nenhuma.

  • replacedByInvoiceIdsArray<string>

    As faturas que substituem esta. Ausente quando não há nenhuma.

  • replacementobject

    Só para o comprador, em leituras de uma única fatura, em uma fatura substituída que não foi rejeitada: creditedInFull e uncredited - o valor dela menos as notas de crédito aceitas e pendentes, na sua moeda. Enquanto uncredited estiver acima de 0, pagar essa fatura e também a substituta paga duas vezes, e RecordPayment, StartStripePayment e ExportInvoicesForPayment pedem confirmReplaced.

  • uncreditedOriginalsArray

    Só para o comprador, em leituras de uma única fatura, em uma fatura substituta: as faturas que ela substitui e que as notas de crédito não cobrem por inteiro. Ausente quando não há nenhuma.

Erros

  • 404 Not Found - Não existe fatura com este id no espaço de trabalho de quem chama.
  • 409 Conflict - Só para quem chama como Fornecedor. Código INVOICE_ID_AMBIGUOUS: mais de um dos seus compradores tem uma fatura sua com este id (os ids são únicos só dentro de um comprador), então a Pleaxy não tenta adivinhar a qual você se refere. Nada é lido nem alterado. O campo buyers do corpo lista o ID do espaço de trabalho e o nome de cada comprador: repita a chamada com ?buyer=<esse ID do espaço de trabalho>.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
  • 403 Forbidden - O token Bearer ou a chave de API de quem chama não dá acesso a este espaço de trabalho (regionId), ou não tem a função exigida.
GET /v1/workspaces/{regionId}/invoices/{invoiceId}
Requisição
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Resposta · 200 OK
{
   "documentType": "invoice" | "debit_note",
   "amendsInvoiceId": "string",
   "amendsExternalInvoiceNumber": "string",
   "debitNoteIds": [ "string" ],
   "replacesInvoiceIds": [ "string" ],
   "replacedByInvoiceIds": [ "string" ],
   "replacement": { "creditedInFull": boolean, "uncredited": number },
   "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
   "id": "string",
   "po": "string",
   "poLineNo": number,
   "billsNoPoLine": true,
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "usageAmount": number,
   "usageCurrency": "string",
   "tolerancePct": number,
   "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
   "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
   "discrepancyReason": "amount" | "currency",
   "paid": boolean,
   "dueInDays": number,
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "createdAt": "string",
   "lastRemindedAt": "string",
   "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
   "replacesInvoiceId": "string",
   "source": "po-flip" | "direct" | "manual" | "feed",
   "submittedFormat": "json" | "cxml" | "ubl",
   "submittedBy": "string",
   "externalInvoiceNumber": "string",
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
   "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
   "rateWarnings": [
      { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
   ],
   "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
   "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
   "invoiceKind": "prepayment",
   "creditNoteIds": [ "string" ],
   "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
   "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
   "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
}

Obter atividade da fatura

Retorna o histórico de uma fatura, do mais antigo para o mais recente.

GET/v1/workspaces/{regionId}/invoices/{invoiceId}/activity

Parâmetros

  • invoiceIdstringObrigatório

    O identificador da fatura.

  • buyerstring

    Só para quem chama como Fornecedor, e só necessário depois de um 409 *_ID_AMBIGUOUS: o ID do espaço de trabalho do comprador (terminado em .buyer) ou o id da região, da lista buyers do 409. Só o documento desse comprador é considerado; se não houver nenhum ali, é 404. Um ID de espaço de trabalho .supplier é 400 BUYER_QUALIFIER_INVALID ("The buyer parameter must be one buyer's Workspace ID (ending in .buyer), from the buyers list in the 409 response."). Ignorado para quem chama como Comprador.

Retorna

200 OK com o objeto mostrado na resposta.

Mais detalhes

O histórico de uma fatura, do mais antigo para o mais recente: a chegada, as verificações e conciliações executadas, as etapas de aprovação, a rejeição, os pagamentos, os lembretes e os comentários. Cada entrada tem um kind e dados estruturados, nunca uma frase, para que você mesmo escreva o texto. A maioria das entradas é lida da própria fatura, então uma fatura mais antiga também tem histórico. Quem chama como Fornecedor recebe só a chegada da fatura, o resultado, os pagamentos registrados, os lembretes e os comentários compartilhados.

Campos da resposta

  • idstring

    Estável para o mesmo histórico, para você saber quais entradas já viu.

  • kind, datastring, object

    received: data.source, enteredBy, submittedFormat, fileName. corrects: data.invoiceId, a fatura rejeitada que ela substitui. control_findings (só comprador): data.codes. match (só comprador): data.result (matched, discrepancy ou unverified) e data.reason. sent_for_approval (só comprador): data.from (discrepancy ou unverified). approval (só comprador): data.action, data.stage e data.to para uma reatribuição. approved. rejected: data.reasonCode e data.reason. payment: data.action, method, paymentDate, reference. reminder: data.autonomy quando o espaço de trabalho o enviou por conta própria. comment: o próprio comentário, em comment.

Erros

  • 404 Not Found - Não existe fatura com este id no espaço de trabalho de quem chama.
  • 409 Conflict - Só para quem chama como Fornecedor. Código INVOICE_ID_AMBIGUOUS: mais de um dos seus compradores tem uma fatura sua com este id (os ids são únicos só dentro de um comprador), então a Pleaxy não tenta adivinhar a qual você se refere. Nada é lido nem alterado. O campo buyers do corpo lista o ID do espaço de trabalho e o nome de cada comprador: repita a chamada com ?buyer=<esse ID do espaço de trabalho>.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
  • 403 Forbidden - O token Bearer ou a chave de API de quem chama não dá acesso a este espaço de trabalho (regionId), ou não tem a função exigida.
GET /v1/workspaces/{regionId}/invoices/{invoiceId}/activity
Requisição
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/activity" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Resposta · 200 OK
{
   "entries": [
      {
         "id": "string",
         "at": "string",
         "kind": "received" | "corrects" | "control_findings" | "match" | "sent_for_approval" | "approval" | "approved" | "rejected" | "payment" | "reminder" | "comment",
         "actorName": "string",
         "actorSide": "buyer" | "supplier" | "system",
         "data": { },
         "comment": {
            "id": "string",
            "documentKind": "invoice" | "purchase_order",
            "documentId": "string",
            "body": "string",
            "visibility": "internal" | "shared",
            "authorSide": "buyer" | "supplier",
            "authorKey": "string",
            "authorName": "string",
            "authorOrgName": "string",
            "mentions": [ { "employeeKey": "string", "name": "string" } ],
            "createdAt": "string",
            "deletedAt": "string",
            "viewerIsAuthor": boolean
         }
      }
   ]
}

Listar comentários da fatura

Lista os comentários de uma fatura.

GET/v1/workspaces/{regionId}/invoices/{invoiceId}/comments

Parâmetros

  • invoiceIdstringObrigatório

    O identificador da fatura.

  • buyerstring

    Só para quem chama como Fornecedor, e só necessário depois de um 409 *_ID_AMBIGUOUS: o ID do espaço de trabalho do comprador (terminado em .buyer) ou o id da região, da lista buyers do 409. Só o documento desse comprador é considerado; se não houver nenhum ali, é 404. Um ID de espaço de trabalho .supplier é 400 BUYER_QUALIFIER_INVALID ("The buyer parameter must be one buyer's Workspace ID (ending in .buyer), from the buyers list in the 409 response."). Ignorado para quem chama como Comprador.

Retorna

200 OK com o objeto mostrado na resposta.

Mais detalhes

Os comentários de uma fatura, do mais antigo para o mais recente: os internos do seu lado e todos os compartilhados. Um comentário que o autor excluiu continua na conversa com o corpo vazio, para ainda mostrar que algo foi dito e quando. Mesma busca de GetInvoice, então um fornecedor chega às faturas que emitiu.

Campos da resposta

  • visibilitystring

    internal: só o lado do autor. shared: o comprador e o fornecedor leem.

  • authorKey, mentionsstring, Array

    Só nos comentários do seu lado: quem escreveu, pela chave de funcionário, e quem foi mencionado. O outro lado vê authorName e authorOrgName.

  • bodystring

    Texto simples com as quebras de linha. Vazio depois que o autor o excluiu; deletedAt então indica quando.

  • viewerIsAuthorboolean

    Se quem chama o escreveu e, portanto, pode excluí-lo. Sempre false para uma chave de API.

Erros

  • 404 Not Found - Não existe fatura com este id no espaço de trabalho de quem chama.
  • 409 Conflict - Só para quem chama como Fornecedor. Código INVOICE_ID_AMBIGUOUS: mais de um dos seus compradores tem uma fatura sua com este id (os ids são únicos só dentro de um comprador), então a Pleaxy não tenta adivinhar a qual você se refere. Nada é lido nem alterado. O campo buyers do corpo lista o ID do espaço de trabalho e o nome de cada comprador: repita a chamada com ?buyer=<esse ID do espaço de trabalho>.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
  • 403 Forbidden - O token Bearer ou a chave de API de quem chama não dá acesso a este espaço de trabalho (regionId), ou não tem a função exigida.
GET /v1/workspaces/{regionId}/invoices/{invoiceId}/comments
Requisição
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/comments" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Resposta · 200 OK
{
   "comments": [
      {
         "id": "string",
         "documentKind": "invoice" | "purchase_order",
         "documentId": "string",
         "body": "string",
         "visibility": "internal" | "shared",
         "authorSide": "buyer" | "supplier",
         "authorKey": "string",
         "authorName": "string",
         "authorOrgName": "string",
         "mentions": [ { "employeeKey": "string", "name": "string" } ],
         "createdAt": "string",
         "deletedAt": "string",
         "viewerIsAuthor": boolean
      }
   ]
}

Adicionar comentário à fatura

Adiciona um comentário a uma fatura.

POST/v1/workspaces/{regionId}/invoices/{invoiceId}/comments

Parâmetros

  • invoiceIdstringObrigatório

    O identificador da fatura.

  • buyerstring

    Só para quem chama como Fornecedor, e só necessário depois de um 409 *_ID_AMBIGUOUS: o ID do espaço de trabalho do comprador (terminado em .buyer) ou o id da região, da lista buyers do 409. Só o documento desse comprador é considerado; se não houver nenhum ali, é 404. Um ID de espaço de trabalho .supplier é 400 BUYER_QUALIFIER_INVALID ("The buyer parameter must be one buyer's Workspace ID (ending in .buyer), from the buyers list in the 409 response."). Ignorado para quem chama como Comprador.

Corpo

  • bodystringObrigatório

    Texto simples, até 2.000 caracteres. As quebras de linha são mantidas; caracteres de controle, de texto bidirecional e invisíveis são removidos.

  • visibility"internal" | "shared"Obrigatório

    internal: só a sua equipe. shared: o outro lado também lê e responde. Os comentários de um fornecedor são sempre compartilhados.

  • mentionsstring[]

    Até 10 chaves de funcionário de pessoas do seu próprio espaço de trabalho a notificar (veja ListEmployees). A notificação nunca traz o texto do comentário.

Retorna

201 Created com o objeto mostrado na resposta.

Mais detalhes

Comenta uma fatura: interno à sua equipe, ou compartilhado com o outro lado - por exemplo, um comprador perguntando ao fornecedor sobre uma linha. Comentários nunca são editados. As pessoas que você menciona, quem já comentou do seu lado e, em um comentário compartilhado, o outro lado são notificados (invoice_comment); a notificação nunca traz o texto.

Só sessão conectada. Uma chave de API recebe 403 HUMAN_SESSION_REQUIRED.

Erros

  • 400 Bad Request - Um corpo vazio ("Write something before you post the comment."), mais de 2.000 caracteres, mais de 10 menções, uma menção a alguém que não está no seu espaço de trabalho, uma visibilidade diferente de internal ou shared, um comentário interno de fornecedor ("A supplier's comments are always shared with the buyer."), ou um comentário compartilhado em um documento cujo fornecedor não está na Pleaxy (publique-o como internal).
  • 403 Forbidden - Código HUMAN_SESSION_REQUIRED: quem chama é uma chave de API ("Comments are written by people. Sign in to Pleaxy to post one.").
  • 404 Not Found - Não existe fatura com este id no espaço de trabalho de quem chama.
  • 409 Conflict - Só para quem chama como Fornecedor. Código INVOICE_ID_AMBIGUOUS: mais de um dos seus compradores tem uma fatura sua com este id (os ids são únicos só dentro de um comprador), então a Pleaxy não tenta adivinhar a qual você se refere. Nada é lido nem alterado. O campo buyers do corpo lista o ID do espaço de trabalho e o nome de cada comprador: repita a chamada com ?buyer=<esse ID do espaço de trabalho>.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
  • 403 Forbidden - O token Bearer ou a chave de API de quem chama não dá acesso a este espaço de trabalho (regionId), ou não tem a função exigida.
POST /v1/workspaces/{regionId}/invoices/{invoiceId}/comments
Requisição
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/comments" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "body": "string",
   "visibility": "internal" | "shared",
   "mentions": [ "string" ]
}
Resposta · 201 Created
{
   "id": "string",
   "documentKind": "invoice" | "purchase_order",
   "documentId": "string",
   "body": "string",
   "visibility": "internal" | "shared",
   "authorSide": "buyer" | "supplier",
   "authorKey": "string",
   "authorName": "string",
   "authorOrgName": "string",
   "mentions": [ { "employeeKey": "string", "name": "string" } ],
   "createdAt": "string",
   "deletedAt": "string",
   "viewerIsAuthor": boolean
}

Excluir comentário da fatura

Exclui um dos seus comentários em uma fatura.

DELETE/v1/workspaces/{regionId}/invoices/{invoiceId}/comments/{commentId}

Parâmetros

  • invoiceIdstringObrigatório

    O identificador da fatura.

  • commentIdstringObrigatório

    O comentário, por exemplo "CMT-1760313600000-3f9a1c2e".

  • buyerstring

    Só para quem chama como Fornecedor, e só necessário depois de um 409 *_ID_AMBIGUOUS: o ID do espaço de trabalho do comprador (terminado em .buyer) ou o id da região, da lista buyers do 409. Só o documento desse comprador é considerado; se não houver nenhum ali, é 404. Um ID de espaço de trabalho .supplier é 400 BUYER_QUALIFIER_INVALID ("The buyer parameter must be one buyer's Workspace ID (ending in .buyer), from the buyers list in the 409 response."). Ignorado para quem chama como Comprador.

Retorna

200 OK com o objeto mostrado na resposta.

Mais detalhes

Retira o seu próprio comentário: o texto é removido e a conversa mantém o registro de que um comentário foi feito. Excluí-lo de novo não altera nada.

Só sessão conectada. Uma chave de API recebe 403 HUMAN_SESSION_REQUIRED.

Erros

  • 403 Forbidden - Código HUMAN_SESSION_REQUIRED: quem chama é uma chave de API ("Comments are written by people. Sign in to Pleaxy to post one.").
  • 403 Forbidden - O comentário não é seu ("Only the person who wrote a comment can delete it.").
  • 404 Not Found - Nenhum comentário com este id que você possa ver neste documento ("Comment {commentId} not found."), ou o documento não existe.
  • 409 Conflict - Só para quem chama como Fornecedor. Código INVOICE_ID_AMBIGUOUS: mais de um dos seus compradores tem uma fatura sua com este id (os ids são únicos só dentro de um comprador), então a Pleaxy não tenta adivinhar a qual você se refere. Nada é lido nem alterado. O campo buyers do corpo lista o ID do espaço de trabalho e o nome de cada comprador: repita a chamada com ?buyer=<esse ID do espaço de trabalho>.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
  • 403 Forbidden - O token Bearer ou a chave de API de quem chama não dá acesso a este espaço de trabalho (regionId), ou não tem a função exigida.
DELETE /v1/workspaces/{regionId}/invoices/{invoiceId}/comments/{commentId}
Requisição
curl -X DELETE "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/comments/{commentId}" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Resposta · 200 OK
{
   "id": "string",
   "documentKind": "invoice" | "purchase_order",
   "documentId": "string",
   "body": "string",
   "visibility": "internal" | "shared",
   "authorSide": "buyer" | "supplier",
   "authorKey": "string",
   "authorName": "string",
   "authorOrgName": "string",
   "mentions": [ { "employeeKey": "string", "name": "string" } ],
   "createdAt": "string",
   "deletedAt": "string",
   "viewerIsAuthor": boolean
}

Enviar fatura

Registra o documento de fatura de um fornecedor, em JSON, cXML ou UBL.

POST/v1/workspaces/{regionId}/invoices

Corpo

  • invoiceNumberstring

    Número da fatura informado pelo fornecedor, usado para eliminar envios repetidos duplicados dentro da região.

  • poIdstring

    Id do pedido na Pleaxy que esta fatura atende, por exemplo "PO-AB12CD34". Omita para enviar uma fatura avulsa.

  • supplierstringObrigatório

    Nome de exibição do fornecedor / contraparte.

  • amountnumberObrigatório

    Total da fatura. Precisa ser maior que 0.

  • currencystring

    Código ISO 4217 (aqui, ou como currencyID do UBL / currency de Money do cXML). Precisa ser a moeda da região, e uma fatura contra um pedido precisa estar na moeda do pedido. A Pleaxy não converte moedas.

  • dueInDaysnumber

    Condições de pagamento em dias. O padrão são as condições de pagamento padrão do contrato ao qual o pedido pertence, senão 30.

  • lineItemsArray<{ description, qty?, unitPrice?, amount }>

    Detalhamento opcional da fatura por item de linha.

  • lineItems[].ai{ invoicer, vendor, model, meter, region?, period? }

    Uma linha de IA: o que ela cobra e o mês de uso (YYYY-MM; se omitido, o mês anterior a invoiceDate), com qty na unidade do medidor (milhões de tokens, horas). Cada linha de IA é associada à linha de IA do pedido com o mesmo escopo e verificada contra a condição do contrato, a tabela de preços e o relatório de uso do provedor; o que ela viola aparece como apontamentos ai_*.

  • poLineNonumber

    Com poId: a linha do pedido que esta fatura cobra, como em CreateInvoice. Documentos XML informam isso por linha (UBL cac:OrderLineReference/cbc:LineID, cXML InvoiceDetailItemReference@lineNumber).

  • billsNoPoLineboolean

    Com poId: true quando a fatura não cobra nenhuma das linhas do pedido, como em CreateInvoice. Não junto com poLineNo.

  • remittanceInstructionsobject

    Onde o comprador deve pagar, guardado com a fatura e nunca alterado depois: { method, payeeName, bankName?, iban?, accountNumber?, bic?, routingNumber?, mailingAddress?, paymentReference?, notes? }. method é bank_transfer (exige iban ou accountNumber), wire (iban ou accountNumber, mais bic ou routingNumber), ach (accountNumber e um routingNumber ABA de 9 dígitos), check (mailingAddress) ou other (notes). A Pleaxy nunca verifica esses dados; o comprador é avisado quando o beneficiário ou a conta difere da fatura anterior deste fornecedor.

  • pdfBase64string

    PDF da fatura codificado em base64.

Retorna

201 Created com o objeto mostrado na resposta.

Mais detalhes

Operação de comprador: registra diretamente o documento de fatura de um fornecedor, sem uma transformação prévia de um pedido criado na Pleaxy. Um corpo JSON com connectionId é CreateInvoice. O corpo JSON abaixo (fornecedor e valor, sem connectionId) está obsoleto e é aceito até a v2. Quem chama como Fornecedor recebe 400 SUPPLIER_DIRECT_INVOICE_RETIRED - uma fatura enviada assim não chegava a nenhum comprador; fornecedores usam CreateInvoice ou FlipPurchaseOrderToInvoice. Aceita três formatos de requisição, escolhidos pelo Content-Type: application/json (um corpo CreateInvoiceDto), ou application/xml / text/xml contendo um InvoiceDetailRequest cXML ou um documento Invoice UBL 2.1 (detectado automaticamente a partir do XML analisado). Se poId for informado, ele é validado contra um pedido existente no status awaiting_fulfillment, e a fatura fica "pending" quando existe um valor de faturamento ativo para o provedor do pedido, e caso contrário "unverified" com unverifiedReason "no_billing_connection"; se omitido, a fatura começa "unverified" com unverifiedReason "no_purchase_order". Um documento XML recebe o mesmo mapeamento de descontos, encargos e impostos, a mesma recusa de linhas negativas e a mesma conferência de totais que SubmitFeedInvoice, e uma falha é 400 INVOICE_DOCUMENT_INVALID. O corpo JSON não muda.

Só para quem chama como Comprador: chame com uma sessão conectada ou com a X-Api-Key com escopo de um espaço de trabalho de comprador (veja Chaves de API). Quem chama como Fornecedor sempre recebe 400. Use CreateInvoice.

Campos da resposta

  • idstring

    Identificador da fatura. "INV-<sufixo do PO>" quando poId foi informado; caso contrário, um "INV-XXXXXXXX" aleatório.

  • matchStatusstring

    "pending" se poId foi informado e existe um valor de faturamento ativo para o provedor dele; "unverified" caso contrário.

  • unverifiedReasonstring

    Definido quando matchStatus é "unverified": "no_purchase_order" ou "no_billing_connection".

  • currencystring

    A moeda em que a fatura está registrada, em maiúsculas.

  • sourcestring

    Sempre "direct" para este endpoint.

  • submittedFormatstring

    "json", "cxml" ou "ubl", conforme o Content-Type da requisição.

Erros

  • 400 Bad Request (SUPPLIER_DIRECT_INVOICE_RETIRED) - Quem chama é um Fornecedor. Retornado para todo tipo de conteúdo e credencial, antes de o corpo ser analisado como fatura ou validado, e nada é armazenado. O limite de tamanho da requisição continua valendo antes, e um corpo que não é JSON válido recebe o 400 genérico do analisador de JSON. Veja ListInvoiceCounterparties e CreateInvoice.
  • 400 Bad Request - amount não é maior que zero, o corpo JSON não passa na validação, o pedido referenciado não está no status awaiting_fulfillment, o corpo XML não é cXML/UBL reconhecível ou traz uma declaração DOCTYPE ou de entidade (INVOICE_DOCUMENT_INVALID; a referência à DTD externa padrão do cXML é permitida), ou a moeda da fatura não pode ser aceita - não é a moeda da região ("This invoice is in GBP, but Europe is invoiced in EUR. Ask the supplier to reissue it in EUR - Pleaxy doesn't convert currencies."), ou não é a do pedido referenciado ("This invoice is in GBP, but PO-AB12CD34 is in EUR. Ask the supplier to reissue it in EUR - Pleaxy doesn't convert currencies."). As duas recusas de moeda trazem os códigos INVOICE_CURRENCY_MISMATCH e INVOICE_PO_CURRENCY_MISMATCH.
  • 404 Not Found - poId foi informado, mas não existe pedido com esse id no espaço de trabalho.
  • 409 Conflict - invoiceNumber já foi usado por outra fatura neste espaço de trabalho, ou o pedido referenciado já tem uma fatura.
  • 415 Unsupported Media Type - O cabeçalho Content-Type é qualquer coisa diferente de application/json, application/xml ou text/xml.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
  • 403 Forbidden - O token Bearer ou a chave de API de quem chama não dá acesso a este espaço de trabalho (regionId), ou a função de compras de quem chama como Comprador não tem acesso de 'create' a faturas - só administrator e finance têm ("Your procurement role ('read-only') doesn't have 'create' access to 'invoices'"; uma chave de API também é orientada a ser recriada com uma função que conceda esse acesso). Com um regionId simples, quem tem os dois perfis é tratado como Comprador; use o ID do espaço de trabalho .supplier para agir como Fornecedor.
POST /v1/workspaces/{regionId}/invoices
Requisição
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/reg_01k5x8p9j3q7vn2mhb4tzc6rde.buyer/invoices" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "supplier": "Corvo Cloud Services",
    "amount": 4820.00,
    "currency": "USD",
    "dueInDays": 30,
    "invoiceNumber": "CORVO-2026-0091"
  }'
Resposta · 201 Created
{
  "id": "INV-7F3A9C21",
  "supplier": "Corvo Cloud Services",
  "amount": 4820,
  "currency": "USD",
  "matchStatus": "unverified",
  "paid": false,
  "dueInDays": 30,
  "createdAt": "2026-02-03T09:12:44.000Z",
  "source": "direct",
  "submittedFormat": "json",
  "externalInvoiceNumber": "CORVO-2026-0091"
}

Listar contrapartes de fatura

Lista para quem você pode faturar, ou por quem pode ser faturado.

GET/v1/workspaces/{regionId}/invoices/counterparties

Retorna

200 OK com o objeto mostrado na resposta.

Mais detalhes

As contrapartes ativas para as quais quem chama pode faturar com CreateInvoice: para quem chama como Comprador, os fornecedores aprovados; para quem chama como Fornecedor, os compradores que o aprovaram. Cada entrada traz o id da conexão a passar como connectionId, a moeda do comprador e os pedidos de compra em aberto entre exatamente esse par.

Só sessão conectada. Uma chave de API recebe 403.

Campos da resposta

  • connectionIdstring

    A conexão de fornecedor a faturar - o connectionId de CreateInvoice.

  • namestring

    O nome da contraparte: o do fornecedor para quem chama como Comprador, o do comprador para quem chama como Fornecedor.

  • currencystring

    A moeda do comprador. Toda fatura para esta contraparte é registrada nela.

  • openPurchaseOrdersArray

    Pedidos de compra aguardando atendimento com valor ainda a faturar, entre exatamente este comprador e este fornecedor - os poIds que CreateInvoice aceita. invoicedAmount é o que faturas anteriores consumiram, antes de impostos (ausente quando nenhuma consumiu). lines são as linhas do pedido que uma fatura pode cobrar (o poLineNo dela): o valor de cada uma e quanto dela faturas anteriores consumiram (consumed), antes de impostos. defaultDueInDays são as condições de pagamento padrão do contrato ao qual o pedido pertence, para preencher o dueInDays de uma fatura (ausente quando não há). billToCompanyName é a empresa para quem o fornecedor do pedido fatura (o billToParty dele; ausente em pedidos mais antigos). paidDeposits são faturas pagas do pedido que uma fatura ainda pode deduzir como adiantamento (deductions[].sourceInvoiceId): quanto cada uma devia e quanto nenhuma fatura deduziu ainda, com impostos (ausente quando não há).

  • invoiceFeedEnabledboolean

    Só para quem chama como Comprador: true quando as faturas automatizadas deste fornecedor estão ativadas (veja SetInvoiceFeed). Ativadas desde a aprovação; ausente significa desativadas.

  • invoiceFeedUpdatedAtstring

    Só para quem chama como Comprador: quando as faturas automatizadas foram ativadas ou desativadas pela última vez. Ausente se nunca.

  • feedReadinessstring

    Só para quem chama como Comprador com ?perConnection=true: em que pé estão as faturas automatizadas desta conexão - "off" (o interruptor), "untested" (nada passou ainda), "tested" (uma chamada a ValidateFeedInvoice passou), "live" (pelo menos uma fatura aceita). A própria visão do fornecedor (ListSupplierConnections) também pode mostrar "no_key" e "not_connected".

  • feedAcceptedCount, feedLastAcceptedAt, feedValidCount, feedLastValidAtnumber, string, number, string

    Só para quem chama como Comprador com ?perConnection=true: o espelho do registro de tentativas (ListFeedAttempts), depois que o feed foi chamado.

Erros

  • 403 Forbidden - Quem chama se autenticou com uma chave de API em vez de uma sessão conectada ("This action requires a logged-in user session, not an API key"), a credencial não dá acesso a este espaço de trabalho, ou a função de compras de quem chama como Comprador não pode criar faturas.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
GET /v1/workspaces/{regionId}/invoices/counterparties
Requisição
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/counterparties" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Resposta · 200 OK
{
   "counterparties": [
      {
         "connectionId": "string",
         "name": "string",
         "currency": "string",
         "openPurchaseOrders": [
            {
               "id": "string", "amount": number, "createdAt": "string", "label": "string", "invoicedAmount": number, "defaultDueInDays": number, "billToCompanyName": "string",
               "lines": [ { "lineNo": number, "name": "string", "amount": number, "consumed": number } ],
               "paidDeposits": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "currency": "string", "owed": number, "available": number, "paidOn": "string", "prepayment": true, "reference": "string" } ]
            }
         ],
         "invoiceFeedEnabled": boolean,
         "invoiceFeedUpdatedAt": "string"
      }
   ]
}

Criar fatura

Cria uma fatura para um comprador ou fornecedor conectado.

POST/v1/workspaces/{regionId}/invoices

Corpo

  • documentTypestring

    invoice (o padrão), debit_note ou credit_note. Com credit_note, o restante do corpo é o de CreateCreditNote (um campo desconhecido é 400) e a resposta é a nota de crédito. Com debit_note, é uma fatura que altera outra para mais: informe amendsInvoiceId (ou amendsInvoiceNumber, o número do fornecedor); connectionId pode ser omitido. Ela assume a contraparte, o pedido, a linha do pedido e a moeda da original (outro pedido ou moeda é 400 DEBIT_NOTE_INVALID), consome saldo do pedido e é aprovada e paga como qualquer fatura. É conciliada com o pedido, exceto no pedido de um provedor de nuvem, em que começa como unverified com unverifiedReason "debit_note", para uma pessoa revisar. A original precisa ser uma fatura deste fornecedor para este comprador (senão, 404 DEBIT_NOTE_ORIGINAL_NOT_FOUND), não rejeitada e que não seja ela mesma uma nota de débito. Qualquer outro valor é 400 DOCUMENT_TYPE_INVALID.

  • amendsInvoiceIdstring

    Só para nota de débito: o id na Pleaxy da fatura que ela altera.

  • amendsInvoiceNumberstring

    Só para nota de débito: o número do fornecedor da fatura que ela altera, quando o id na Pleaxy não é conhecido.

  • replacesInvoiceIdsArray<string>

    Uma fatura substituta (crédito e refaturamento: o fornecedor credita faturas por inteiro e as cobra de novo): os ids na Pleaxy das faturas e notas de débito que ela substitui, de 1 a 20, todas deste fornecedor. Ela pode cobrar outro pedido de compra ou outra moeda que as originais. Cada original passa a listá-la em replacedByInvoiceIds. Uma fatura desconhecida ou de outro fornecedor é 404 REPLACES_NOT_FOUND; uma nota de crédito, ou substituições em uma nota de débito, são 400 REPLACES_INVALID.

  • replacesInvoiceNumbersArray<string>

    Uma fatura substituta: os números do fornecedor das faturas que ela substitui, quando os ids na Pleaxy não são conhecidos. De 1 a 20.

  • connectionIdstringObrigatório

    A contraparte a faturar - um connectionId de ListInvoiceCounterparties.

  • poIdstring

    Um pedido de compra em aberto entre exatamente este comprador e este fornecedor, de openPurchaseOrders da contraparte.

  • invoiceNumberstringObrigatório

    De 1 a 64 caracteres: letras, dígitos, '.', '_', '/' e '-', começando com letra ou dígito. Único por fornecedor dentro do espaço de trabalho do comprador, sem diferenciar maiúsculas e minúsculas.

  • invoiceDatestringObrigatório

    YYYY-MM-DD. Não pode estar no futuro nem mais de 365 dias no passado.

  • dueInDaysnumber

    Condições de pagamento em dias, de 0 a 365. O padrão são as condições de pagamento padrão do contrato ao qual o pedido pertence (defaultDueInDays de ListInvoiceCounterparties), senão 30.

  • lineItemsArray<{ description, qty, unitPrice, discount?, charge? }>Obrigatório

    De 1 a 100 linhas. description tem de 1 a 200 caracteres, qty é maior que 0 e no máximo 1.000.000, unitPrice vai de 0 a 1.000.000.000. Uma redução é um desconto, nunca um preço negativo: um unitPrice negativo é 400 ("lineItems[1].unitPrice can't be negative. Send a reduction as that line's "discount", or as an "adjustments" entry with "type": "discount"."). discount e charge são totais opcionais da linha, 0 ou mais, sem mais casas decimais do que a moeda do comprador permite (2 para USD e EUR, nenhuma para JPY; caso contrário, 400, por exemplo "taxAmount must be a whole number in JPY."), e o desconto da linha não pode ser maior que qty × unitPrice + charge. null não é aceito: omita um campo que não se aplica. O total depois dos descontos precisa ser maior que 0, e o total no máximo 1.000.000.000.000.000. A linha do pedido que a fatura cobra é informada uma vez, na fatura (poLineNo ou billsNoPoLine), nunca nas linhas dela: o poLineNo ou billsNoPoLine próprio de uma linha é ignorado. Coloque frete e manuseio em adjustments, não como uma linha.

  • lineItems[].ai{ invoicer, vendor, model, meter, region?, period? }

    Uma linha de IA: o que ela cobra e o mês de uso (YYYY-MM; se omitido, o mês anterior a invoiceDate), com qty na unidade do medidor (milhões de tokens, horas). Cada linha de IA é associada à linha de IA do pedido com o mesmo escopo e verificada contra a condição do contrato, a tabela de preços e o relatório de uso do provedor; o que ela viola aparece como apontamentos ai_*.

  • poLineNonumber

    Com poId: a linha do pedido que esta fatura cobra, pelo lineNo (de GetPurchaseOrder ou de openPurchaseOrders[].lines de ListInvoiceCounterparties). Uma fatura cobra uma linha do pedido, e todas as linhas dela são verificadas contra essa linha; para cobrar várias linhas do pedido, envie uma fatura para cada uma. As linhas nunca são associadas às linhas do pedido pela descrição. Em um pedido de uma linha, uma fatura sem esse campo cobra essa linha. Em um pedido de várias linhas, uma fatura que não indica nenhuma é uma "discrepancy" (po_line_unassigned) que uma pessoa precisa resolver, porque não foi possível verificar o limite nem o preço de nenhuma linha. Um lineNo que o pedido não tem é 400 INVOICE_PO_LINE_UNKNOWN. Não junto com billsNoPoLine (400 INVOICE_PO_LINE_CONTRADICTORY). Uma nota de débito sem ele assume o da original.

  • billsNoPoLineboolean

    Com poId: true quando a fatura não cobra nenhuma das linhas do pedido, como um extra não pedido ou uma taxa avulsa. Ela consome só o saldo do pedido, e a fatura nunca é aprovada automaticamente. Não junto com poLineNo.

  • adjustmentsArray<{ type, description, amount }>

    Descontos e encargos no nível da fatura, antes de impostos. No máximo 20. type é "discount" ou "charge"; description tem de 1 a 200 caracteres, armazenada sem caracteres de controle, quebras de linha nem controles de texto bidirecional; amount é uma magnitude positiva, 0.01 ou mais, sem mais casas decimais do que a moeda do comprador permite (type dá o sinal).

  • taxAmountnumber

    Imposto total da fatura, como informado pelo fornecedor. Está incluído no total da fatura. A Pleaxy não calcula impostos. 0 ou mais, sem mais casas decimais do que a moeda do comprador permite. Omita quando a fatura não informa imposto; null é recusado.

  • currencystring

    ISO 4217, opcional. Só é verificado: precisa ser a moeda do comprador, que é sempre a armazenada.

  • pdfBase64string

    PDF da fatura codificado em base64, até 8MB.

  • remittanceInstructionsobject

    Onde o comprador deve pagar, guardado com a fatura e nunca alterado depois: { method, payeeName, bankName?, iban?, accountNumber?, bic?, routingNumber?, mailingAddress?, paymentReference?, notes? }. method é bank_transfer (exige iban ou accountNumber), wire (iban ou accountNumber, mais bic ou routingNumber), ach (accountNumber e um routingNumber ABA de 9 dígitos), check (mailingAddress) ou other (notes). A Pleaxy nunca verifica esses dados; o comprador é avisado quando o beneficiário ou a conta difere da fatura anterior deste fornecedor.

  • withholdingsArray<{ description, amount, rate? }>

    Opcional. Impostos que o comprador retém do que paga (retenciones, por exemplo ISR retenido), na moeda da fatura. Reduzem o valor devido, nunca o total nem o imposto dele. Somadas às deduções, menores que o total. No máximo 20.

  • deductionsArray<{ kind, description, amount, reference?, paidOn?, sourceInvoiceId? }>

    Opcional. O que já foi pago da fatura, depois de impostos: kind "prepayment" para um depósito ou adiantamento que o comprador pagou (exige uma reference, ou um sourceInvoiceId indicando a sua fatura paga no mesmo pedido, cuja referência e data de pagamento são então preenchidas e que o pedido consome uma única vez), ou kind "credit" para um crédito que você aplicou na fatura. Reduzem o valor devido, nunca o total nem o imposto dele. Somadas às retenções, menores que o total; não junto com paymentCurrencyAmount. No máximo 20. UBL: cbc:PrepaidAmount; cXML: DepositAmount.

  • taxBreakdownArray<{ description, amount, rate? }>

    Opcional. Impostos por tipo na moeda da fatura, por exemplo [{ "description": "IVA", "rate": 21, "amount": 199.50 }, { "description": "Percepción IIBB", "amount": 28.50 }]. rate é uma porcentagem e é opcional. A soma precisa dar taxAmount, que passa a ser obrigatório (400 TAX_BREAKDOWN_MISMATCH). No máximo 20. Só para exibição. UBL: os TaxSubtotals do TaxTotal na moeda do documento, mantidos quando a soma confere.

  • paymentCurrencyAmountobject

    Opcional. Só quando a fatura informa o valor devido em outra moeda (por exemplo, a AWS cobrando um cliente argentino em ARS); nesse caso totalAmount é o valor devido, usado por contas a pagar, pagamentos e registro de pagamento: { currencyCode, totalAmount, totalAmountBeforeTax?, amountBreakdown?: { subTotalAmount?, discounts?, fees?, taxes? }, currencyExchangeDetails: { rate, rateDate?, rateSource?, sourceCurrencyCode?, targetCurrencyCode? } }, o mesmo formato do PaymentCurrencyAmount do AWS Invoicing. rate significa 1 da moeda da fatura = rate currencyCode, como impresso na fatura. Omita quando a fatura é convertida pela cotação da data de pagamento. Cada valor informado precisa estar a até 0,5% (ou uma unidade menor) do valor da fatura × rate (400 STATED_AMOUNT_RATE_MISMATCH, indicando os dois valores), cada detalhamento precisa somar o seu total, e currencyCode não pode ser a própria moeda da fatura (400 SAME_CURRENCY). rateDate é YYYY-MM-DD, não pode estar no futuro e no máximo um dia depois da data da fatura. UBL: cbc:PaymentCurrencyCode com cac:PaymentExchangeRate; cXML: Money@alternateCurrency/alternateAmount em DueAmount. Registrado como informado; a Pleaxy não converte nada.

  • taxCurrencyAmountobject

    Opcional. Imposto na moeda legal do país do comprador quando ela não é a moeda da fatura. Mesmo formato de paymentCurrencyAmount; amountBreakdown.taxes.totalAmount é obrigatório e totalAmount é opcional. Exige taxAmount. UBL: o cac:TaxTotal de cbc:TaxCurrencyCode com cac:TaxExchangeRate, ou, sem ele (EN 16931 BT-111), uma cotação derivada dos dois totais de imposto; cXML: Money@alternateAmount em Tax. Uma cotação derivada tem rateSource "derived" e não é verificada contra os valores de onde veio. Só para exibição.

Retorna

201 Created com o objeto mostrado na resposta.

Mais detalhes

Enviado como corpo application/json com um connectionId; o mesmo caminho sem ele é SubmitInvoice. Substituiu POST /v1/workspaces/{regionId}/invoices/manual, que agora retorna 410 ROUTE_MERGED. Registra uma fatura para uma contraparte ativa de ListInvoiceCounterparties - um Fornecedor faturando um dos seus compradores, ou um Comprador lançando a fatura de um dos seus fornecedores. A fatura é armazenada no espaço de trabalho do comprador, na moeda do comprador, para que os dois lados a vejam. O servidor calcula o valor de cada linha como qty × unitPrice + charge − discount, e o total como as linhas, menos os descontos no nível da fatura, mais os encargos no nível da fatura, mais taxAmount. Cada valor calculado é arredondado para cima a partir da metade, até a menor unidade da moeda do comprador: ao centavo para USD e EUR, a unidades inteiras para JPY (3 × 333.33 JPY dá um valor de linha de 1.000). Esse total é o valor conciliado, aprovado, limitado e pago. Com poId, ela fica "pending" quando existe um valor de faturamento ativo para o provedor do pedido, e caso contrário "unverified" com unverifiedReason "no_billing_connection" (só na visão do comprador); sem poId, fica "unverified" com unverifiedReason "no_purchase_order". Um Comprador que lança uma fatura não pode aprová-la, resolvê-la, exportá-la nem registrar o pagamento dela, a menos que ninguém mais no espaço de trabalho possa, e pagá-la pela Stripe sempre exige outra pessoa.

Quem chama como Comprador: uma sessão conectada ou a X-Api-Key de um espaço de trabalho de comprador. Quem a registrou e, no caso de uma chave, também a pessoa que criou a chave não podem aprová-la, resolvê-la, exportá-la nem registrar o pagamento dela, a menos que uma pessoa com sessão conectada seja a única no espaço de trabalho que poderia; pagá-la pela Stripe sempre exige outra pessoa. Quem chama como Fornecedor: só sessão conectada; uma chave de API de fornecedor recebe 400 SUPPLIER_DIRECT_INVOICE_RETIRED.

Campos da resposta

  • sourcestring

    Sempre "manual" para este endpoint.

  • amountnumber

    O total a pagar: as linhas depois dos próprios descontos e encargos, menos os descontos no nível da fatura, mais os encargos no nível da fatura, mais taxAmount. Conciliação, aprovação, autonomia, tetos de contrato e liquidação usam esse valor.

  • lineItemsArray

    Cada linha como foi armazenada. amount é o valor líquido da linha, antes de impostos; discount e charge só aparecem em uma linha que os tenha.

  • adjustmentsArray

    Descontos e encargos no nível da fatura. Ausente quando não há nenhum.

  • taxAmountnumber

    O imposto informado, já incluído em amount. Só para exibição: nenhuma decisão o lê. Ausente quando nenhum foi informado.

  • currencystring

    A moeda do comprador.

Erros

  • 400 Bad Request - O corpo não passa na validação (inclusive mais de 20 ajustes, um taxAmount negativo, ou mais de 2 casas decimais em um desconto, encargo, ajuste ou taxAmount), INVOICE_DOCUMENT_INVALID (um unitPrice negativo; um desconto de linha maior que a linha: "Line 2's discount (12.00 USD) is more than the line (10.00 USD). Check lineItems[1].discount."; um total depois dos descontos que não é maior que 0: "The invoice total after discounts must be greater than zero."; um total acima de 1.000.000.000.000.000; ou mais casas decimais do que a moeda do comprador permite em um desconto, encargo, ajuste ou taxAmount ("lineItems[0].discount must be a whole number in JPY.")), invoiceDate está fora do intervalo (INVOICE_DATE_OUT_OF_RANGE), a contraparte ainda não está conectada (COUNTERPARTY_NOT_ACTIVE), poId não pode ser faturado (PO_NOT_INVOICEABLE), poLineNo é uma linha que o pedido não tem (INVOICE_PO_LINE_UNKNOWN) ou vem junto com billsNoPoLine (INVOICE_PO_LINE_CONTRADICTORY), ou currency não é a do comprador (INVOICE_CURRENCY_MISMATCH).
  • 404 Not Found - Nenhuma contraparte com este connectionId está visível para quem chama.
  • 409 Conflict - Este fornecedor já tem uma fatura com este número (INVOICE_NUMBER_TAKEN).
  • 400 Bad Request - O corpo tem um amount (AMOUNT_NOT_ACCEPTED: "Leave amount off: Pleaxy computes the total from the line items."), ou um Fornecedor chamou com uma chave de API (SUPPLIER_DIRECT_INVOICE_RETIRED).
  • 403 Forbidden - A credencial não dá acesso a este espaço de trabalho, ou a função de compras de quem chama como Comprador não pode criar faturas.
  • 422 Unprocessable Entity - A contraparte é o próprio perfil de comprador ou fornecedor de quem chama (SELF_DEALING).
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
POST /v1/workspaces/{regionId}/invoices
Requisição
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "connectionId": "string",
   "poId": "string",
   "invoiceNumber": "string",
   "invoiceDate": "string",
   "dueInDays": number,
   "poLineNo": number,
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "currency": "string",
   "pdfBase64": "string"
}
Resposta · 201 Created
{
   "documentType": "invoice" | "debit_note",
   "amendsInvoiceId": "string",
   "amendsExternalInvoiceNumber": "string",
   "debitNoteIds": [ "string" ],
   "replacesInvoiceIds": [ "string" ],
   "replacedByInvoiceIds": [ "string" ],
   "replacement": { "creditedInFull": boolean, "uncredited": number },
   "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
   "id": "string",
   "po": "string",
   "poLineNo": number,
   "billsNoPoLine": true,
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "usageAmount": number,
   "usageCurrency": "string",
   "tolerancePct": number,
   "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
   "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
   "discrepancyReason": "amount" | "currency",
   "paid": boolean,
   "dueInDays": number,
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "createdAt": "string",
   "lastRemindedAt": "string",
   "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
   "replacesInvoiceId": "string",
   "source": "po-flip" | "direct" | "manual" | "feed",
   "submittedFormat": "json" | "cxml" | "ubl",
   "submittedBy": "string",
   "externalInvoiceNumber": "string",
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
   "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
   "rateWarnings": [
      { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
   ],
   "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
   "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
   "invoiceKind": "prepayment",
   "creditNoteIds": [ "string" ],
   "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
   "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
   "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
}

Obter cotações de câmbio

Retorna as cotações de câmbio usadas para comparar valores com os seus limites.

GET/v1/workspaces/{regionId}/exchange-rates

Retorna

200 OK com o objeto mostrado na resposta.

Mais detalhes

As cotações que a Pleaxy usa só para comparar pedidos e faturas em outras moedas com os seus limites de aprovação, condições de valor, limites de aprovação automática, regras de automação e limites de gastos. Valores, faturas e pagamentos nunca são convertidos. Uma linha por moeda que os seus pedidos, faturas e fornecedores usam: a cotação de referência para a moeda do seu espaço de trabalho (uma cotação diária da Exchange Rate API, usada enquanto tiver no máximo 3 dias). Os espaços de trabalho não podem definir as próprias cotações. Sem uma cotação recente, um documento nessa moeda passa por todas as etapas de aprovação e nunca é aprovado automaticamente. Uma cadeia montada com uma cotação a registra como approval.fx: { from, to, rate, source: provider | none, asOf, controlAmount, supplierStated? }. Quando uma fatura informa o próprio valor na moeda do seu espaço de trabalho (o paymentCurrencyAmount dela, ou o total pela cotação de taxCurrencyAmount), controlAmount é o maior entre esse valor e o valor pela cotação de referência, para que uma cotação informada baixa não reduza o roteamento; supplierStated { amount, rateSource, rateDate } mostra o valor da fatura. Sem uma cotação de referência recente, a cadeia continua passando por todas as etapas de aprovação, nunca pelo valor da fatura. Uma fatura cuja cotação informada se afasta mais de warningPct da cotação de referência quando chega traz rateWarnings (só na visão do comprador); eles nunca a bloqueiam. Rates By Exchange Rate API (https://www.exchangerate-api.com).

Só sessão conectada, com acesso 'view' às configurações de aprovação. Uma chave de API recebe 403 HUMAN_SESSION_REQUIRED: os termos do provedor de cotações não permitem que elas sejam oferecidas por uma API.

Erros

  • 403 Forbidden - Uma chave de API (HUMAN_SESSION_REQUIRED), quem chama como Fornecedor, ou uma função de compras sem 'view' nas configurações de aprovação.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
GET /v1/workspaces/{regionId}/exchange-rates
Requisição
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/exchange-rates" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Resposta · 200 OK
{
   "workspaceCurrency": "string",
   "warningPct": number,
   "rows": [
      { "currency": "string", "providerRate": number, "providerAsOf": "string" }
   ],
   "provider": { "asOf": "string", "fresh": boolean, "attribution": { "text": "string", "url": "string" } }
}

Definir aviso de cotação de câmbio

Define quando a cotação de câmbio própria de uma fatura recebe um aviso.

PUT/v1/workspaces/{regionId}/exchange-rates

Corpo

  • warningPctnumberObrigatório

    De 0 a 100.

Retorna

200 OK com o objeto mostrado na resposta.

Mais detalhes

Define o quanto, em porcentagem, a cotação informada pela própria fatura (a cotação de paymentCurrencyAmount ou de taxCurrencyAmount) pode se afastar da cotação de referência (uma cotação diária recente da Exchange Rate API) antes que a fatura traga rateWarnings. Padrão 5. Verificado quando a fatura chega; faturas já recebidas mantêm os avisos. Um aviso nunca bloqueia uma fatura. Sem uma cotação de referência recente, não há com o que comparar e não há aviso.

Só sessão conectada (uma chave de API recebe 403 HUMAN_SESSION_REQUIRED), com acesso 'edit' às configurações de aprovação: administradores.

Erros

  • 400 Bad Request - warningPct ausente, ou não é um número de 0 a 100.
  • 403 Forbidden - Uma chave de API, quem chama como Fornecedor, ou uma função de compras sem 'edit' nas configurações de aprovação.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
PUT /v1/workspaces/{regionId}/exchange-rates
Requisição
curl -X PUT "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/exchange-rates" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "warningPct": number
}
Resposta · 200 OK
{
   "warningPct": number
}

Obter cotação de referência

Retorna a cotação de câmbio de referência de uma data.

GET/v1/workspaces/{regionId}/reference-rate

Parâmetros

  • fromstringObrigatório

    Código ISO 4217: a moeda da fatura.

  • tostringObrigatório

    Código ISO 4217: a moeda de pagamento ou de imposto.

  • datestring

    YYYY-MM-DD, a data da fatura. Padrão: hoje.

Retorna

200 OK com o objeto mostrado na resposta.

Mais detalhes

A cotação de referência de 1 from em to na data de uma fatura: a cotação diária da Exchange Rate API dessa data, ou a mais recente dos 3 dias anteriores, nunca a de um dia posterior. Sem date, a de hoje, enquanto tiver no máximo 3 dias. O formulário Nova fatura a usa para sugerir a cotação de uma moeda de pagamento ou de imposto; a fatura registra a cotação e os valores enviados, quaisquer que sejam, e a Pleaxy verifica se eles conferem. reference fica ausente quando não há cotação (mesma moeda, moeda desconhecida, ou nenhum registro para essa data). Rates By Exchange Rate API (https://www.exchangerate-api.com).

Só sessão conectada, com acesso 'create' a faturas. Uma chave de API recebe 403 HUMAN_SESSION_REQUIRED: os termos do provedor de cotações não permitem que elas sejam oferecidas por uma API.

Erros

  • 400 Bad Request - from ou to não é um código ISO 4217 de 3 letras, ou date não está no formato YYYY-MM-DD.
  • 403 Forbidden - Uma chave de API (HUMAN_SESSION_REQUIRED), ou uma função sem 'create' em faturas.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
GET /v1/workspaces/{regionId}/reference-rate
Requisição
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/reference-rate" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Resposta · 200 OK
{
   "reference": {
      "from": "string",
      "to": "string",
      "rate": number,
      "date": "string",
      "source": "string",
      "attribution": { "text": "string", "url": "string" }
   }
}

Definir moedas do fornecedor

Define as moedas em que um fornecedor fatura e recebe.

PUT/v1/workspaces/{regionId}/supplier-connections/{connectionId}/currencies

Parâmetros

  • connectionIdstringObrigatório

    A conexão com o fornecedor.

Corpo

  • billingCurrencystring | null

    ISO 4217. Só para um fornecedor sem conta na Pleaxy; um com conta define as próprias moedas.

  • paymentCurrencystring | null

    ISO 4217. Para um fornecedor com conta, uma moeda em que ele aceita pagamento.

Retorna

200 OK com o objeto mostrado na resposta.

Mais detalhes

Define dois padrões para um fornecedor: "Fatura em" (billingCurrency), a moeda em que um fornecedor sem conta na Pleaxy fatura você, usada nos novos pedidos e faturas dele; e "Pagar em" (paymentCurrency), a moeda em que você costuma pagá-lo, sugerida como moeda de pagamento de uma nova fatura. Um campo ausente fica como está, null o remove. Pedidos e faturas existentes mantêm suas moedas. O fornecedor nunca vê nenhum dos dois.

Sessão conectada ou a X-Api-Key de um espaço de trabalho de comprador, com acesso 'edit' a fornecedores: administrator ou contracts-and-suppliers.

Erros

  • 400 Bad Request - Um código que não é ISO 4217, billingCurrency para um fornecedor com conta (BILLING_CURRENCY_SUPPLIER_OWNED), ou um paymentCurrency que ele não aceita (PAYMENT_CURRENCY_NOT_ACCEPTED).
  • 403 Forbidden - Quem chama como Fornecedor, ou uma função de compras sem 'edit' em fornecedores.
  • 404 Not Found - Essa conexão não existe neste espaço de trabalho.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
PUT /v1/workspaces/{regionId}/supplier-connections/{connectionId}/currencies
Requisição
curl -X PUT "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/supplier-connections/{connectionId}/currencies" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "billingCurrency": "string" | null,
   "paymentCurrency": "string" | null
}
Resposta · 200 OK
{
   "id": "string",
   "supplierName": "string",
   "billingCurrency": "string",
   "paymentCurrency": "string"
}

Definir feed de faturas

Ativa ou desativa as faturas automatizadas de um fornecedor.

PUT/v1/workspaces/{regionId}/supplier-connections/{connectionId}/invoice-feed

Parâmetros

  • connectionIdstringObrigatório

    A conexão com o fornecedor.

Corpo

  • enabledbooleanObrigatório

    true para aceitar as faturas automatizadas deste fornecedor, false para interromper.

Retorna

200 OK com o objeto mostrado na resposta.

Mais detalhes

Ativa ou desativa as faturas automatizadas (SubmitFeedInvoice) de um fornecedor para uma conexão aprovada. Ativadas desde o momento em que você aprova a integração do fornecedor (conexões aprovadas antes de 9 de outubro de 2026 mantêm o valor que tinham); este é o botão de parada. Desativar recusa já a próxima requisição do fornecedor; as faturas já recebidas continuam em Faturas e conciliação e seguem pela aprovação. O fornecedor é notificado (invoice_feed_changed). Definir o valor que já está definido não altera nada. Retorna a conexão com invoiceFeedEnabled, invoiceFeedUpdatedAt e invoiceFeedUpdatedBy. ListInvoiceCounterparties mostra a configuração atual e a prontidão de cada conexão.

Só sessão conectada (uma chave de API recebe 403), com acesso 'edit' a faturas: administrator ou finance.

Erros

  • 400 Bad Request - A conexão ainda não está aprovada (COUNTERPARTY_NOT_ACTIVE), ou enabled não é booleano.
  • 403 Forbidden - Uma chave de API em vez de uma sessão conectada, quem chama como Fornecedor, ou uma função de compras sem 'edit' em faturas (read-only, contracts-and-suppliers, relationships, requisitions).
  • 404 Not Found - Nenhuma conexão com este id no espaço de trabalho.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
PUT /v1/workspaces/{regionId}/supplier-connections/{connectionId}/invoice-feed
Requisição
curl -X PUT "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/supplier-connections/{connectionId}/invoice-feed" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "enabled": boolean
}
Resposta · 200 OK
{
   "id": "string",
   "supplierName": "string",
   "status": "approved",
   "invoiceFeedEnabled": boolean,
   "invoiceFeedUpdatedAt": "string",
   "invoiceFeedUpdatedBy": "string"
}

Listar tentativas do feed

Lista as tentativas de faturas automatizadas de uma conexão.

GET/v1/workspaces/{regionId}/supplier-connections/{connectionId}/feed-attempts

Parâmetros

  • connectionIdstringObrigatório

    A conexão com o fornecedor.

  • beforestring

    O cursor da última linha da página que você tem, para a página seguinte. 50 linhas por página.

Retorna

200 OK com o objeto mostrado na resposta.

Mais detalhes

O registro de tentativas das faturas automatizadas de uma conexão: cada chamada a SubmitFeedInvoice ou ValidateFeedInvoice que chegou à conexão, da mais recente para a mais antiga, com o que a Pleaxy respondeu. Uma recusa antes de a conexão ser conhecida (sem chave, escopo errado, limite de taxa da chave, uma conexão que não é de quem chama) não pode ser atribuída a uma conexão e não é registrada. O documento em si nunca é armazenado. O fornecedor lê as próprias conexões; o comprador lê os fornecedores que aprovou; os dois veem as mesmas linhas. As linhas são mantidas por 90 dias. A própria conexão (ListSupplierConnections, ListInvoiceCounterparties com ?perConnection=true) espelha a última de cada tipo: feedLastAttemptAt, feedLastAcceptedAt, feedAcceptedCount, feedLastRefusedAt, feedLastRefusedCode, feedLastValidAt, feedValidCount.

Sessão conectada ou chave de API. Quem chama como Comprador precisa de acesso 'view' a fornecedores.

Campos da resposta

  • modestring

    "submit" para a rota real, "validate" para a de teste.

  • formatstring

    Conhecido depois que o corpo foi analisado; ausente quando a chamada foi recusada antes disso.

  • outcomestring

    "accepted" (201, fatura criada), "replayed" (200, o mesmo documento de novo), "valid" (um teste aprovado), "refused" (qualquer erro depois de a conexão ser conhecida, inclusive um feed desativado).

  • status, code, messagenumber, string, string

    A resposta que quem chamou recebeu: o status HTTP e, em uma recusa, o código e a mensagem como retornados.

  • messageId, paramsstring, object

    Em uma recusa, o messageId e os params do erro como retornados, para exibi-lo no idioma de quem lê. Ausente em linhas registradas antes de eles serem guardados.

  • invoiceNumberstring

    O número da sua fatura, quando a análise chegou até ele.

  • invoiceIdstring

    A fatura criada ou reenviada; em um teste aprovado, a fatura que um número reenviado já identifica.

  • creditNoteIdstring

    A nota de crédito criada ou reenviada, quando o documento era uma nota de crédito; invoiceNumber é então o número dela.

  • keyIdstring

    O id da chave de API (nunca o segredo), para comparar com ListApiKeys.

  • beforestring

    O cursor da última linha quando pode haver linhas mais antigas; ausente na última página.

Erros

  • 400 Bad Request - before não é um cursor de uma página anterior.
  • 403 Forbidden - A função de compras de quem chama como Comprador não pode ver fornecedores (requisitions).
  • 404 Not Found - Nenhuma conexão com este id é sua.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
GET /v1/workspaces/{regionId}/supplier-connections/{connectionId}/feed-attempts
Requisição
curl "$PLEAXY_API_BASE_URL/v1/workspaces/reg_01k5x8p9j3q7vn2mhb4tzc6rde.supplier/supplier-connections/SC-1A2B3C4D/feed-attempts" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Resposta · 200 OK
{
  "attempts": [
    {
      "at": "2026-10-09T10:12:44.000Z",
      "mode": "submit",
      "format": "ubl",
      "outcome": "refused",
      "status": 400,
      "code": "INVOICE_CURRENCY_MISMATCH",
      "message": "This invoice is in EUR, but Beta Buyer is invoiced in USD. Reissue it in USD - Pleaxy doesn't convert currencies.",
      "invoiceNumber": "INV-2026-0143",
      "keyId": "k_01k6…",
      "cursor": "FEEDATTEMPT#2026-10-09T10:12:44.000Z#3f9a1c2e"
    },
    {
      "at": "2026-10-09T09:58:02.000Z",
      "mode": "validate",
      "format": "json",
      "outcome": "valid",
      "status": 200,
      "invoiceNumber": "INV-2026-0001",
      "keyId": "k_01k6…",
      "cursor": "FEEDATTEMPT#2026-10-09T09:58:02.000Z#b71e0d44"
    }
  ]
}

Executar conciliação da fatura

Compara uma fatura com o uso medido na nuvem.

POST/v1/workspaces/{regionId}/invoices/{invoiceId}/run-match

Parâmetros

  • invoiceIdstringObrigatório

    O identificador da fatura.

Retorna

201 Created com o objeto mostrado na resposta.

Mais detalhes

Executa a conciliação de 3 vias: compara o valor faturado (amount) com o uso medido (usageAmount, em usageCurrency - a moeda do próprio provedor, vinda de uma conexão de faturamento ativa). Só um valor real é comparado: uma fatura pendente mais antiga sem valor de uso real passa a "unverified" (unverifiedReason "no_billing_connection"), sem cadeia de aprovação. Só um valor de uma fatura emitida pela AWS permite que a autonomia ou uma regra de automação a aprove sem ninguém agir; uma conciliação com qualquer outra fonte vai para uma pessoa. Dentro da tolerância (3%), a fatura passa a matched e uma cadeia de aprovação é montada. Fora da tolerância, ela se resolve automaticamente como matched se o excedente se qualificar para autonomia; caso contrário, passa a discrepancy (discrepancyReason "amount") e aguarda ResolveInvoiceDiscrepancy. A Pleaxy não converte moedas: quando o uso está em uma moeda diferente da fatura, nada é comparado e nenhuma autonomia ou regra de automação se aplica - a fatura passa a discrepancy com discrepancyReason "currency" e precisa de ResolveInvoiceDiscrepancy. Uma fatura contra um pedido de compra que não é de um provedor de nuvem não tem uso a comparar: ela é criada como pending com matchBasis "purchase_order" quando passa nas verificações do pedido e do contrato, e esta chamada monta a cadeia de aprovação dela - matched, sempre com um aprovador humano, nunca autonomia nem regra de automação. Uma fatura criada como "unverified" (unverifiedReason "no_billing_connection") antes disso é verificada de novo contra o pedido e o contrato: matched, ou discrepancy com discrepancyReason "controls". O solicitante da cadeia de aprovação é quem chama autenticado (uma chave de API é registrada como apikey:<keyId>), nunca um nome passado na requisição; a requisição não recebe corpo.

Campos da resposta

  • matchStatusstring

    "matched" ou "discrepancy" depois da conciliação, ou "unverified" para uma fatura pendente mais antiga sem valor de uso real.

  • discrepancyReasonstring

    Definido só em uma divergência: "amount" (fora da tolerância), "currency" (uso em outra moeda, nunca comparado) ou "controls" (viola o pedido ou o contrato).

  • matchBasisstring

    "purchase_order" quando a fatura foi conciliada com um pedido de compra que não é de um provedor de nuvem, e não com o uso. Ausente em uma conciliação por uso.

Erros

  • 400 Bad Request - O matchStatus da fatura não é "pending" (nem "unverified" contra um pedido de compra que não é de um provedor de nuvem). Para qualquer outra fatura não verificada (sem pedido de compra, ou sem conexão de faturamento): "Invoice '{invoiceId}' can't be matched: it's unverified, with no usage figure to compare against. Nothing was matched. A person must review it in Pleaxy before it can go for approval." Caso contrário: "Invoice '{invoiceId}' has already been matched (result: {matchStatus})."
  • 404 Not Found - Não existe fatura com este id no espaço de trabalho.
  • 409 Conflict - Outra execução ou decisão chegou ao mesmo tempo; leia a fatura de novo.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
  • 403 Forbidden - O token Bearer ou a chave de API de quem chama não dá acesso a este espaço de trabalho (regionId), ou não tem a função exigida.
POST /v1/workspaces/{regionId}/invoices/{invoiceId}/run-match
Requisição
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/run-match" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Resposta · 201 Created
{
   "documentType": "invoice" | "debit_note",
   "amendsInvoiceId": "string",
   "amendsExternalInvoiceNumber": "string",
   "debitNoteIds": [ "string" ],
   "replacesInvoiceIds": [ "string" ],
   "replacedByInvoiceIds": [ "string" ],
   "replacement": { "creditedInFull": boolean, "uncredited": number },
   "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
   "id": "string",
   "po": "string",
   "poLineNo": number,
   "billsNoPoLine": true,
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "usageAmount": number,
   "usageCurrency": "string",
   "tolerancePct": number,
   "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
   "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
   "discrepancyReason": "amount" | "currency",
   "paid": boolean,
   "dueInDays": number,
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "createdAt": "string",
   "lastRemindedAt": "string",
   "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
   "replacesInvoiceId": "string",
   "source": "po-flip" | "direct" | "manual" | "feed",
   "submittedFormat": "json" | "cxml" | "ubl",
   "submittedBy": "string",
   "externalInvoiceNumber": "string",
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
   "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
   "rateWarnings": [
      { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
   ],
   "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
   "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
   "invoiceKind": "prepayment",
   "creditNoteIds": [ "string" ],
   "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
   "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
   "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
}

Resolver divergência da fatura

Envia para aprovação uma fatura com divergência já revisada.

POST/v1/workspaces/{regionId}/invoices/{invoiceId}/resolve-discrepancy

Parâmetros

  • invoiceIdstringObrigatório

    O identificador da fatura.

Retorna

201 Created com o objeto mostrado na resposta.

Mais detalhes

Substituição manual para uma fatura que uma pessoa revisou - inicia uma cadeia de aprovação normal (sem autonomia) para uma fatura com divergência ou não verificada. Uma divergência passa a "matched"; uma fatura não verificada continua "unverified", com a cadeia pendente, porque nada foi verificado. O solicitante da cadeia de aprovação é quem chama autenticado (uma chave de API é registrada como apikey:<keyId>), nunca um nome passado na requisição; a requisição não recebe corpo.

Uma chave de API pode resolver uma divergência de valor ou de moeda. Só uma sessão conectada pode resolver uma fatura não verificada, com qualquer unverifiedReason; uma chave de API recebe 403 HUMAN_REVIEW_REQUIRED.

Erros

  • 400 Bad Request - O matchStatus da fatura não é "discrepancy" nem "unverified".
  • 403 Forbidden - HUMAN_REVIEW_REQUIRED: a fatura não está verificada e quem chama é uma chave de API ("An unverified invoice has nothing to match it against, so a person must review it. Sign in to Pleaxy to resolve it."). Nada é alterado.
  • 404 Not Found - Não existe fatura com este id no espaço de trabalho.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
  • 403 Forbidden - O token Bearer ou a chave de API de quem chama não dá acesso a este espaço de trabalho (regionId), ou não tem a função exigida.
POST /v1/workspaces/{regionId}/invoices/{invoiceId}/resolve-discrepancy
Requisição
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/resolve-discrepancy" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Resposta · 201 Created
{
   "documentType": "invoice" | "debit_note",
   "amendsInvoiceId": "string",
   "amendsExternalInvoiceNumber": "string",
   "debitNoteIds": [ "string" ],
   "replacesInvoiceIds": [ "string" ],
   "replacedByInvoiceIds": [ "string" ],
   "replacement": { "creditedInFull": boolean, "uncredited": number },
   "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
   "id": "string",
   "po": "string",
   "poLineNo": number,
   "billsNoPoLine": true,
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "usageAmount": number,
   "usageCurrency": "string",
   "tolerancePct": number,
   "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
   "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
   "discrepancyReason": "amount" | "currency",
   "paid": boolean,
   "dueInDays": number,
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "createdAt": "string",
   "lastRemindedAt": "string",
   "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
   "replacesInvoiceId": "string",
   "source": "po-flip" | "direct" | "manual" | "feed",
   "submittedFormat": "json" | "cxml" | "ubl",
   "submittedBy": "string",
   "externalInvoiceNumber": "string",
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
   "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
   "rateWarnings": [
      { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
   ],
   "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
   "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
   "invoiceKind": "prepayment",
   "creditNoteIds": [ "string" ],
   "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
   "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
   "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
}

Aprovar fatura

Aprova a etapa de aprovação atual de uma fatura.

POST/v1/workspaces/{regionId}/invoices/{invoiceId}/approve

Parâmetros

  • invoiceIdstringObrigatório

    O identificador da fatura.

Retorna

201 Created com o objeto mostrado na resposta.

Mais detalhes

Avança a cadeia de aprovação da fatura em um estágio. Só o funcionário indicado na etapa atual pode chamar isto - nenhuma função, permissão ou direito de administrador substitui ser o indicado, e uma chave de API nunca pode ser indicada. Uma aprovação concluída envia uma notificação invoice_approved ao fornecedor. Não recebe corpo e age como quem chama autenticado (uma chave de API age como apikey:<keyId>).

Só sessão conectada. Qualquer outro chamador, inclusive uma chave de API, recebe 403 HUMAN_APPROVAL_REQUIRED antes de qualquer leitura.

Erros

  • 400 Bad Request - A fatura não tem estágio de aprovação pendente.
  • 403 Forbidden - Código HUMAN_APPROVAL_REQUIRED. Quem chama é uma chave de API. As etapas de aprovação indicam um funcionário específico, e uma chave nunca pode ser um, então uma chave não pode aprovar nem rejeitar uma etapa. Peça ao funcionário indicado na etapa que aja sobre ela na Pleaxy.
  • 403 Forbidden - Código APPROVER_NOT_ASSIGNED. A etapa atual não tem aprovador atribuído, então ninguém pode agir sobre ela. Um administrador precisa atribuir um antes, com ReassignPurchaseOrderApprovalStage / ReassignInvoiceApprovalStage.
  • 403 Forbidden - Quem chama não é o funcionário indicado na etapa atual. Só esse funcionário pode aprová-la ou rejeitá-la - nenhuma função ou permissão substitui ser o indicado.
  • 404 Not Found - Não existe fatura com este id no espaço de trabalho.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
  • 403 Forbidden - O token Bearer ou a chave de API de quem chama não dá acesso a este espaço de trabalho (regionId), ou não tem a função exigida.
POST /v1/workspaces/{regionId}/invoices/{invoiceId}/approve
Requisição
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/approve" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Resposta · 201 Created
{
   "documentType": "invoice" | "debit_note",
   "amendsInvoiceId": "string",
   "amendsExternalInvoiceNumber": "string",
   "debitNoteIds": [ "string" ],
   "replacesInvoiceIds": [ "string" ],
   "replacedByInvoiceIds": [ "string" ],
   "replacement": { "creditedInFull": boolean, "uncredited": number },
   "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
   "id": "string",
   "po": "string",
   "poLineNo": number,
   "billsNoPoLine": true,
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "usageAmount": number,
   "usageCurrency": "string",
   "tolerancePct": number,
   "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
   "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
   "discrepancyReason": "amount" | "currency",
   "paid": boolean,
   "dueInDays": number,
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "createdAt": "string",
   "lastRemindedAt": "string",
   "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
   "replacesInvoiceId": "string",
   "source": "po-flip" | "direct" | "manual" | "feed",
   "submittedFormat": "json" | "cxml" | "ubl",
   "submittedBy": "string",
   "externalInvoiceNumber": "string",
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
   "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
   "rateWarnings": [
      { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
   ],
   "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
   "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
   "invoiceKind": "prepayment",
   "creditNoteIds": [ "string" ],
   "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
   "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
   "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
}

Rejeitar fatura

Rejeita uma fatura, com um motivo que o fornecedor vê.

POST/v1/workspaces/{regionId}/invoices/{invoiceId}/reject

Parâmetros

  • invoiceIdstringObrigatório

    O identificador da fatura.

Corpo

  • reasonCodestringObrigatório

    Um entre amount_incorrect, not_ordered_or_not_received, duplicate, missing_or_wrong_po, wrong_billing_entity, other. O fornecedor vê o rótulo correspondente.

  • reasonstringObrigatório

    A observação que o fornecedor vê: o que ele deve corrigir. Quebras de linha viram espaços, e caracteres de controle e invisíveis são removidos. Depois disso, ela precisa ter pelo menos 10 letras ou números e no máximo 500 caracteres. Texto simples; nunca exibido como link. Não inclua dados pessoais nem comentários internos.

Retorna

201 Created com o objeto mostrado na resposta.

Mais detalhes

Rejeita a fatura no estágio de aprovação atual, com um motivo que o fornecedor vê. Só o funcionário indicado na etapa atual pode chamar isto. Uma fatura não verificada ou com divergência que ainda não tem cadeia de aprovação é um caso à parte: qualquer comprador com invoices:edit pode rejeitá-la, exceto o comprador que a lançou. Só sessões conectadas: uma chave de API não pode rejeitar. O fornecedor vê o motivo e a observação palavra por palavra, mas não quem rejeitou, e recebe uma notificação que indica só o motivo. A rejeição fica armazenada na fatura como `rejection`. Rejeitar uma fatura que ocupa o pedido de compra reabre esse pedido na mesma gravação, para que o fornecedor possa enviar uma fatura corrigida contra ele: ela recebe o id INV-<sufixo do PO>-R<n> e `replacesInvoiceId`, e precisa de um novo número de fatura, porque a fatura rejeitada mantém o seu.

Erros

  • 400 Bad Request - A fatura não tem estágio de aprovação pendente.
  • 400 Bad Request - Código INVOICE_REJECTION_REASON_INVALID. reasonCode está ausente ou não é um dos seis códigos, ou reason está ausente, não é uma string, tem menos de 10 letras ou números, ou passa de 500 caracteres depois da limpeza.
  • 403 Forbidden - Código HUMAN_APPROVAL_REQUIRED: "Rejecting needs you, signed in to Pleaxy." Quem chama é uma chave de API. Rejeitar é uma decisão que o fornecedor vê, então exige uma pessoa conectada.
  • 403 Forbidden - Código APPROVER_NOT_ASSIGNED. A etapa atual não tem aprovador atribuído, então ninguém pode agir sobre ela. Um administrador precisa atribuir um antes, com ReassignPurchaseOrderApprovalStage / ReassignInvoiceApprovalStage.
  • 403 Forbidden - Quem chama não é o funcionário indicado na etapa atual. Só esse funcionário pode aprová-la ou rejeitá-la - nenhuma função ou permissão substitui ser o indicado.
  • 404 Not Found - Não existe fatura com este id no espaço de trabalho.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
  • 403 Forbidden - O token Bearer ou a chave de API de quem chama não dá acesso a este espaço de trabalho (regionId), ou não tem a função exigida.
POST /v1/workspaces/{regionId}/invoices/{invoiceId}/reject
Requisição
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/reject" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other",
   "reason": "string"
}
Resposta · 201 Created
{
   "documentType": "invoice" | "debit_note",
   "amendsInvoiceId": "string",
   "amendsExternalInvoiceNumber": "string",
   "debitNoteIds": [ "string" ],
   "replacesInvoiceIds": [ "string" ],
   "replacedByInvoiceIds": [ "string" ],
   "replacement": { "creditedInFull": boolean, "uncredited": number },
   "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
   "id": "string",
   "po": "string",
   "poLineNo": number,
   "billsNoPoLine": true,
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "usageAmount": number,
   "usageCurrency": "string",
   "tolerancePct": number,
   "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
   "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
   "discrepancyReason": "amount" | "currency",
   "paid": boolean,
   "dueInDays": number,
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "createdAt": "string",
   "lastRemindedAt": "string",
   "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
   "replacesInvoiceId": "string",
   "source": "po-flip" | "direct" | "manual" | "feed",
   "submittedFormat": "json" | "cxml" | "ubl",
   "submittedBy": "string",
   "externalInvoiceNumber": "string",
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
   "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
   "rateWarnings": [
      { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
   ],
   "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
   "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
   "invoiceKind": "prepayment",
   "creditNoteIds": [ "string" ],
   "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
   "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
   "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
}

Reatribuir estágio de aprovação da fatura

Atribui uma etapa de aprovação pendente a outra pessoa.

POST/v1/workspaces/{regionId}/invoices/{invoiceId}/approval/reassign

Parâmetros

  • invoiceIdstringObrigatório

    O identificador da fatura.

Corpo

  • stageIdstringObrigatório

    Id da etapa pendente a reatribuir. Pode estar em qualquer grupo da cadeia, não só no atual.

  • approverEmployeeKeystringObrigatório

    Chave de funcionário (sub do Cognito) do novo aprovador. Precisa ser um membro comprador deste espaço de trabalho, e não o administrador que está agindo.

  • reasonstring

    Por que a etapa foi reatribuída, até 280 caracteres. Exibido no histórico de aprovação.

Retorna

201 Created com o objeto mostrado na resposta.

Mais detalhes

O equivalente, para faturas, de ReassignPurchaseOrderApprovalStage: aponta uma etapa pendente da cadeia de aprovação desta fatura para outro funcionário indicado. Só administradores (approvalSettings:edit), só sessões conectadas, restrito ao documento e registrado no histórico de aprovação. É assim que se desbloqueia uma fatura vinculada a um fornecedor que, por segurança, caiu em uma etapa "Aprovação manual" sem responsável.

Erros

  • 400 Bad Request - A cadeia já foi aprovada ou rejeitada; a etapa já foi aprovada ou rejeitada; o novo aprovador não é funcionário deste espaço de trabalho; o novo aprovador emitiu o pedido / lançou a fatura, está excluído por segregação de funções, já liberou o limite de gastos com a própria alçada, ou já ocupa outro lugar na mesma etapa; ou a etapa é a revisão do limite de gastos, cujo aprovador é um fato de auditoria congelado (altere-o em Configurações › Limites de gastos).
  • 403 Forbidden - Quem chama não tem approvalSettings:edit (administrador), ou indicou a si mesmo como novo aprovador - atribuir uma etapa ativa a si mesmo faz de uma pessoa a cadeia inteira, sem rastro de política. Código HUMAN_APPROVAL_REQUIRED quando quem chama é uma chave de API: só um administrador conectado pode reatribuir uma etapa de aprovação.
  • 404 Not Found - Não existe documento com este id no espaço de trabalho, ou a cadeia não tem etapa com este stageId.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
  • 403 Forbidden - O token Bearer ou a chave de API de quem chama não dá acesso a este espaço de trabalho (regionId), ou não tem a função exigida.
POST /v1/workspaces/{regionId}/invoices/{invoiceId}/approval/reassign
Requisição
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/approval/reassign" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "stageId": "string",
   "approverEmployeeKey": "string",
   "reason": "string"
}
Resposta · 201 Created
{
   "documentType": "invoice" | "debit_note",
   "amendsInvoiceId": "string",
   "amendsExternalInvoiceNumber": "string",
   "debitNoteIds": [ "string" ],
   "replacesInvoiceIds": [ "string" ],
   "replacedByInvoiceIds": [ "string" ],
   "replacement": { "creditedInFull": boolean, "uncredited": number },
   "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
   "id": "string",
   "po": "string",
   "poLineNo": number,
   "billsNoPoLine": true,
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "usageAmount": number,
   "usageCurrency": "string",
   "tolerancePct": number,
   "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
   "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
   "discrepancyReason": "amount" | "currency",
   "paid": boolean,
   "dueInDays": number,
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "createdAt": "string",
   "lastRemindedAt": "string",
   "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
   "replacesInvoiceId": "string",
   "source": "po-flip" | "direct" | "manual" | "feed",
   "submittedFormat": "json" | "cxml" | "ubl",
   "submittedBy": "string",
   "externalInvoiceNumber": "string",
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
   "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
   "rateWarnings": [
      { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
   ],
   "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
   "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
   "invoiceKind": "prepayment",
   "creditNoteIds": [ "string" ],
   "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
   "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
   "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
}

Registrar pagamento

Registra que uma fatura foi paga fora da Pleaxy.

POST/v1/workspaces/{regionId}/invoices/{invoiceId}/payment-record

Parâmetros

  • invoiceIdstringObrigatório

    O identificador da fatura.

Corpo

  • methodstringObrigatório

    Como foi pago: ach, wire, check, card ou other.

  • paymentDatestringObrigatório

    YYYY-MM-DD em que o pagamento foi enviado. Não pode ser posterior a hoje no fuso horário do espaço de trabalho do comprador, nem anterior à data da fatura.

  • referencestringObrigatório

    A referência do banco ou da ferramenta de pagamento, como um trace ACH ou número de cheque, de 1 a 64 caracteres depois da limpeza. O fornecedor a vê. Nunca um número de conta bancária.

  • currencystring

    Só para um pagamento em uma moeda diferente da do valor devido: ISO 4217. Exige amount e rate.

  • amountnumber

    Com currency: o que foi pago, em currency. O valor devido × rate, com margem de 0,5% ou uma unidade menor.

  • ratenumber

    Com currency: 1 {moeda do valor devido} = rate {currency}, a cotação em que o pagamento foi feito.

  • rateDatestring

    Com currency: YYYY-MM-DD a que a cotação se refere, não posterior a hoje. O padrão é paymentDate.

  • remittance{ note?, file?: { fileId, fileName } }

    Um aviso de pagamento para o fornecedor, enviado com a notificação do pagamento: uma observação, um comprovante de pagamento enviado com RequestRemittanceUpload, ou ambos. Mesmas regras de SendRemittance.

  • confirmReplacedboolean

    True para registrá-lo mesmo assim quando a fatura foi substituída (crédito e refaturamento) e as notas de crédito dela não a cobrem por inteiro: pagar essa fatura e também a substituta paga duas vezes.

Retorna

201 Created com o objeto mostrado na resposta.

Mais detalhes

Registra que uma fatura aprovada foi paga fora da Pleaxy, com o método, a data e a referência. Isto não movimenta dinheiro nem verifica se o pagamento aconteceu. Um pagamento cobre o valor devido inteiro: o paymentCurrencyAmount.totalAmount da fatura quando ela informa um, senão o amount dela, nessa moeda. Não é possível registrar um pagamento parcial. Pagou em uma moeda diferente da do valor devido? Envie também amount, currency e rate: o valor precisa ser o valor devido × rate, com margem de 0,5% ou uma unidade menor, e é registrado como paidAmount; a Pleaxy não converte nada. A fatura passa a constar como paga, e o fornecedor é notificado de que o comprador registrou o pagamento e recebe um aviso de pagamento marcado como registrado pelo comprador e não feito pela Pleaxy. Funciona também em uma fatura exportada, o que conclui a exportação dela. Registrar os mesmos dados de novo responde 200 com alreadyRecorded: true e não altera nada. Opcionalmente, envie junto um aviso de pagamento ao fornecedor (remittance), como SendRemittance faz.

Uma sessão conectada com acesso 'edit' a faturas. Alterado em 2026-09-24, uma correção de segurança dentro da v1: uma chave de API não pode registrar um pagamento (403 HUMAN_SESSION_REQUIRED). A pessoa que lançou a fatura e os membros do perfil do fornecedor não podem registrar o pagamento dela.

Erros

  • 400 Bad Request - Um campo está ausente ou é inválido (códigos PAYMENT_METHOD_INVALID, PAYMENT_DATE_INVALID, PAYMENT_DATE_IN_FUTURE, PAYMENT_DATE_BEFORE_INVOICE, PAYMENT_REFERENCE_INVALID), o valor pago não confere (PAID_AMOUNT_SAME_CURRENCY: currency é a própria moeda do valor devido, então omita amount, currency e rate; PAID_AMOUNT_INVALID: amount ou rate ausente ou não maior que 0, ou um rateDate inválido; PAID_AMOUNT_RATE_MISMATCH: amount não é o valor devido × rate), o aviso de pagamento é inválido (como em SendRemittance), ou o corpo traz um campo que não é aceito.
  • 403 Forbidden - Código HUMAN_SESSION_REQUIRED: quem chama é uma chave de API. Ou uma recusa por segregação de funções: quem chama lançou a fatura ou é membro do perfil do fornecedor.
  • 404 Not Found - Não existe fatura com este id no espaço de trabalho.
  • 409 Conflict - Código PAYMENT_ALREADY_RECORDED (já há outro pagamento registrado: retire-o antes), STRIPE_PAYMENT_IN_PROGRESS (foi iniciado um pagamento pela Pleaxy com Stripe), EXPORT_COOLING_OFF (a exportação dela foi retirada; tente de novo no próximo dia útil), REPLACED_UNCREDITED (a fatura foi substituída e as notas de crédito dela não a cobrem por inteiro: confirme com o fornecedor e depois envie confirmReplaced: true) ou PAYMENT_CHANGED.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
  • 403 Forbidden - O token Bearer ou a chave de API de quem chama não dá acesso a este espaço de trabalho (regionId), ou não tem a função exigida.
POST /v1/workspaces/{regionId}/invoices/{invoiceId}/payment-record
Requisição
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/payment-record" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "method": "ach" | "wire" | "check" | "card" | "other",
   "paymentDate": "YYYY-MM-DD",
   "reference": "string",
   "currency": "string",
   "amount": number,
   "rate": number,
   "rateDate": "YYYY-MM-DD",
   "remittance": { "note": "string", "file": { "fileId": "string", "fileName": "string" } },
   "confirmReplaced": boolean
}
Resposta · 201 Created
{
   "documentType": "invoice" | "debit_note",
   "amendsInvoiceId": "string",
   "amendsExternalInvoiceNumber": "string",
   "debitNoteIds": [ "string" ],
   "replacesInvoiceIds": [ "string" ],
   "replacedByInvoiceIds": [ "string" ],
   "replacement": { "creditedInFull": boolean, "uncredited": number },
   "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
   "id": "string",
   "po": "string",
   "poLineNo": number,
   "billsNoPoLine": true,
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "usageAmount": number,
   "usageCurrency": "string",
   "tolerancePct": number,
   "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
   "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
   "discrepancyReason": "amount" | "currency",
   "paid": boolean,
   "dueInDays": number,
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "createdAt": "string",
   "lastRemindedAt": "string",
   "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
   "replacesInvoiceId": "string",
   "source": "po-flip" | "direct" | "manual" | "feed",
   "submittedFormat": "json" | "cxml" | "ubl",
   "submittedBy": "string",
   "externalInvoiceNumber": "string",
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
   "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
   "rateWarnings": [
      { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
   ],
   "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
   "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
   "invoiceKind": "prepayment",
   "creditNoteIds": [ "string" ],
   "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
   "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
   "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
}

Retirar registro de pagamento

Retira um pagamento registrado.

DELETE/v1/workspaces/{regionId}/invoices/{invoiceId}/payment-record

Parâmetros

  • invoiceIdstringObrigatório

    O identificador da fatura.

Corpo

  • confirmbooleanObrigatório

    Precisa ser true.

Retorna

200 OK com o objeto mostrado na resposta.

Mais detalhes

Retira o registro de um pagamento feito pelo comprador. A fatura volta a constar como não paga e o fornecedor é avisado de que o registro foi retirado. Isto não cancela nem estorna o pagamento em si. O aviso de pagamento passa então a constar como Retirado.

Uma sessão conectada com acesso 'edit' a faturas; uma chave de API recebe 403 HUMAN_SESSION_REQUIRED.

Erros

  • 403 Forbidden - Código HUMAN_SESSION_REQUIRED, ou uma recusa por segregação de funções.
  • 404 Not Found - Não existe fatura com este id, ou código NO_PAYMENT_RECORD: não há pagamento registrado para ela.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
  • 403 Forbidden - O token Bearer ou a chave de API de quem chama não dá acesso a este espaço de trabalho (regionId), ou não tem a função exigida.
DELETE /v1/workspaces/{regionId}/invoices/{invoiceId}/payment-record
Requisição
curl -X DELETE "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/payment-record" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "confirm": true
}
Resposta · 200 OK
{
   "documentType": "invoice" | "debit_note",
   "amendsInvoiceId": "string",
   "amendsExternalInvoiceNumber": "string",
   "debitNoteIds": [ "string" ],
   "replacesInvoiceIds": [ "string" ],
   "replacedByInvoiceIds": [ "string" ],
   "replacement": { "creditedInFull": boolean, "uncredited": number },
   "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
   "id": "string",
   "po": "string",
   "poLineNo": number,
   "billsNoPoLine": true,
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "usageAmount": number,
   "usageCurrency": "string",
   "tolerancePct": number,
   "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
   "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
   "discrepancyReason": "amount" | "currency",
   "paid": boolean,
   "dueInDays": number,
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "createdAt": "string",
   "lastRemindedAt": "string",
   "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
   "replacesInvoiceId": "string",
   "source": "po-flip" | "direct" | "manual" | "feed",
   "submittedFormat": "json" | "cxml" | "ubl",
   "submittedBy": "string",
   "externalInvoiceNumber": "string",
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
   "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
   "rateWarnings": [
      { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
   ],
   "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
   "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
   "invoiceKind": "prepayment",
   "creditNoteIds": [ "string" ],
   "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
   "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
   "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
}

Exportar faturas para pagamento

Exporta faturas aprovadas e não pagas em CSV para a sua rodada de pagamentos.

POST/v1/workspaces/{regionId}/invoices/payment-export

Corpo

  • invoiceIdsstring[]

    Opcional: exporta só estas faturas, de 1 a 1.000 ids. Se omitido (ou com corpo vazio), todas as faturas elegíveis. Qualquer outro campo é 400.

  • confirmReplacedboolean

    Com invoiceIds: exporta mesmo assim uma fatura substituída (crédito e refaturamento) que as notas de crédito dela não cobrem por inteiro. Sem invoiceIds, uma fatura assim sempre fica de fora.

Retorna

200 OK com o objeto mostrado na resposta.

Mais detalhes

Baixa faturas aprovadas e não pagas em CSV para a sua própria rodada de pagamentos, por vencimento primeiro, até 1.000 - todas as faturas elegíveis, ou só as que você indicar em invoiceIds (uma não elegível fica de fora). Cada fatura exportada fica bloqueada até o pagamento dela ser registrado ou a exportação ser retirada, para que não possa ser exportada nem registrada duas vezes. O arquivo não tem dados bancários. O fornecedor não vê a exportação. Cabeçalhos de resposta: X-Pleaxy-Export-Id, X-Pleaxy-Export-Count, X-Pleaxy-Export-Truncated.

Uma sessão conectada com acesso 'edit' a faturas; uma chave de API recebe 403 HUMAN_SESSION_REQUIRED.

Erros

  • 403 Forbidden - Código HUMAN_SESSION_REQUIRED.
  • 400 Bad Request - O corpo não é vazio, {} nem { invoiceIds, confirmReplaced }, ou invoiceIds está vazio, tem mais de 1.000 ids ou um id com mais de 64 caracteres.
  • 409 Conflict - Código REPLACED_UNCREDITED: uma fatura indicada em invoiceIds foi substituída e as notas de crédito dela não a cobrem por inteiro. Envie confirmReplaced: true para exportá-la mesmo assim.
  • 422 Unprocessable Entity - Código NOTHING_TO_EXPORT: nenhuma fatura aprovada e não paga está elegível.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
  • 403 Forbidden - O token Bearer ou a chave de API de quem chama não dá acesso a este espaço de trabalho (regionId), ou não tem a função exigida.
POST /v1/workspaces/{regionId}/invoices/payment-export
Requisição
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/payment-export" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "invoiceIds": [ "string" ],
   "confirmReplaced": boolean
}
Resposta · 200 OK
text/csv: one row per invoice, with a status column of approved_unpaid. related_invoice names what a debit note amends or what a replacement replaces; replaced_by, the last column, the invoices that replace one.

Obter exportação de pagamento

Baixa de novo uma exportação de pagamento.

GET/v1/workspaces/{regionId}/invoices/payment-exports/{exportId}

Parâmetros

  • exportIdstringObrigatório

    X-Pleaxy-Export-Id de ExportInvoicesForPayment.

Retorna

200 OK com o objeto mostrado na resposta.

Mais detalhes

Baixa uma exportação de novo: o mesmo CSV, reconstruído a partir das faturas que ainda estão exportadas sob esse id de exportação. Para quando um download falhou depois que as faturas foram bloqueadas.

Erros

  • 404 Not Found - Código EXPORT_NOT_FOUND: nenhuma fatura continua exportada sob este id.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
  • 403 Forbidden - O token Bearer ou a chave de API de quem chama não dá acesso a este espaço de trabalho (regionId), ou não tem a função exigida.
GET /v1/workspaces/{regionId}/invoices/payment-exports/{exportId}
Requisição
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/payment-exports/{exportId}" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Resposta · 200 OK
text/csv

Retirar exportação de pagamento

Retira uma fatura de uma exportação de pagamento.

DELETE/v1/workspaces/{regionId}/invoices/{invoiceId}/payment-export

Parâmetros

  • invoiceIdstringObrigatório

    O identificador da fatura.

Corpo

  • confirmNotPaidbooleanObrigatório

    Precisa ser true: a sua rodada de pagamentos não pagou esta fatura.

Retorna

200 OK com o objeto mostrado na resposta.

Mais detalhes

Retira uma fatura da exportação, depois que você confirma que a sua rodada de pagamentos não a pagou. A Pleaxy não consegue ver nem cancelar nada na sua própria ferramenta de pagamento. A fatura volta para Aprovada, mas não pode ser exportada nem registrada de novo até o próximo dia útil, e a próxima exportação a marca com previously_exported_at.

Uma sessão conectada com acesso 'edit' a faturas; uma chave de API recebe 403 HUMAN_SESSION_REQUIRED.

Erros

  • 403 Forbidden - Código HUMAN_SESSION_REQUIRED, ou uma recusa por segregação de funções.
  • 404 Not Found - Não existe fatura com este id no espaço de trabalho.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
  • 403 Forbidden - O token Bearer ou a chave de API de quem chama não dá acesso a este espaço de trabalho (regionId), ou não tem a função exigida.
DELETE /v1/workspaces/{regionId}/invoices/{invoiceId}/payment-export
Requisição
curl -X DELETE "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/payment-export" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "confirmNotPaid": true
}
Resposta · 200 OK
{
   "documentType": "invoice" | "debit_note",
   "amendsInvoiceId": "string",
   "amendsExternalInvoiceNumber": "string",
   "debitNoteIds": [ "string" ],
   "replacesInvoiceIds": [ "string" ],
   "replacedByInvoiceIds": [ "string" ],
   "replacement": { "creditedInFull": boolean, "uncredited": number },
   "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
   "id": "string",
   "po": "string",
   "poLineNo": number,
   "billsNoPoLine": true,
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "usageAmount": number,
   "usageCurrency": "string",
   "tolerancePct": number,
   "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
   "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
   "discrepancyReason": "amount" | "currency",
   "paid": boolean,
   "dueInDays": number,
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "createdAt": "string",
   "lastRemindedAt": "string",
   "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
   "replacesInvoiceId": "string",
   "source": "po-flip" | "direct" | "manual" | "feed",
   "submittedFormat": "json" | "cxml" | "ubl",
   "submittedBy": "string",
   "externalInvoiceNumber": "string",
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
   "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
   "rateWarnings": [
      { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
   ],
   "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
   "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
   "invoiceKind": "prepayment",
   "creditNoteIds": [ "string" ],
   "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
   "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
   "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
}

Obter aviso de pagamento

Baixa o aviso de pagamento referente a um pagamento, em PDF.

GET/v1/workspaces/{regionId}/invoices/{invoiceId}/remittance-advice

Parâmetros

  • invoiceIdstringObrigatório

    O identificador da fatura.

Retorna

200 OK com o objeto mostrado na resposta.

Mais detalhes

O aviso de pagamento de um pagamento registrado, em PDF. Ele vem marcado como registrado pelo comprador e não feito pela Pleaxy, e não é um recibo nem comprovante de pagamento. Marcado como Revisado depois de um novo registro e como Retirado depois de uma retirada. Envie Accept: application/pdf. Um fornecedor cujos compradores compartilham um id de fatura adiciona ?buyer=<ID do espaço de trabalho do comprador>.

Erros

  • 404 Not Found - Nenhuma fatura com este id, ou código NO_PAYMENT_RECORD: nunca foi registrado pagamento para ela.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
  • 403 Forbidden - O token Bearer ou a chave de API de quem chama não dá acesso a este espaço de trabalho (regionId), ou não tem a função exigida.
GET /v1/workspaces/{regionId}/invoices/{invoiceId}/remittance-advice
Requisição
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/remittance-advice" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Resposta · 200 OK
application/pdf

Solicitar upload de aviso de pagamento

Retorna uma URL para enviar um comprovante de pagamento.

POST/v1/workspaces/{regionId}/invoices/{invoiceId}/remittance-upload

Parâmetros

  • invoiceIdstringObrigatório

    O identificador da fatura.

Corpo

  • contentType"application/pdf" | "image/png" | "image/jpeg"Obrigatório

    O tipo do arquivo.

Retorna

200 OK com o objeto mostrado na resposta.

Mais detalhes

Uma URL pré-assinada para enviar um comprovante de pagamento, como o comprovante de transferência do banco, para uma fatura aprovada ou paga. Faça PUT do arquivo em uploadUrl com o mesmo Content-Type em até 5 minutos, até maxBytes (10 MB), e depois envie o fileId com SendRemittance ou no remittance de RecordPayment. Um upload que nada anexa é excluído depois de alguns dias.

Uma sessão conectada com acesso 'edit' a faturas; uma chave de API recebe 403 HUMAN_SESSION_REQUIRED. As mesmas regras de segregação de funções de RecordPayment.

Erros

  • 400 Bad Request - contentType não é PDF, PNG nem JPEG ("A remittance file must be a PDF, PNG or JPEG.").
  • 403 Forbidden - Código HUMAN_SESSION_REQUIRED, ou uma recusa por segregação de funções.
  • 404 Not Found - Não existe fatura com este id no espaço de trabalho.
  • 409 Conflict - Código REMITTANCE_NEEDS_PAYMENT: a fatura ainda não está aprovada nem paga.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
  • 403 Forbidden - O token Bearer ou a chave de API de quem chama não dá acesso a este espaço de trabalho (regionId), ou não tem a função exigida.
POST /v1/workspaces/{regionId}/invoices/{invoiceId}/remittance-upload
Requisição
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/remittance-upload" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "contentType": "application/pdf" | "image/png" | "image/jpeg"
}
Resposta · 200 OK
{
   "fileId": "string",
   "uploadUrl": "string",
   "maxBytes": number
}

Enviar aviso de pagamento

Envia ao fornecedor um comprovante de pagamento ou uma observação.

POST/v1/workspaces/{regionId}/invoices/{invoiceId}/remittance

Parâmetros

  • invoiceIdstringObrigatório

    O identificador da fatura.

Corpo

  • notestring

    Até 1.000 caracteres depois da limpeza, para o fornecedor. Vai na notificação do fornecedor, que o canal dele no Slack ou no Teams também recebe quando ela é encaminhada para lá.

  • file{ fileId, fileName }

    Um comprovante de pagamento, como o comprovante de transferência do banco: o fileId de RequestRemittanceUpload, depois que o arquivo foi enviado com PUT para o uploadUrl dele, e um fileName de 1 a 200 caracteres.

Retorna

201 Created com o objeto mostrado na resposta.

Mais detalhes

Envia ao fornecedor um aviso de pagamento para uma fatura paga: um comprovante de pagamento, uma observação, ou ambos. O fornecedor é notificado (invoice_remittance_sent, com a observação) e o lê nos avisos de pagamento da fatura, sem saber quem o enviou; GetRemittanceFile abre o arquivo. Até 20 por fatura, e cada um permanece quando um registro de pagamento é retirado. Isto não é o aviso de pagamento que a Pleaxy gera a partir do registro de pagamento (GetRemittanceAdvice), nem as remittanceInstructions do fornecedor.

Uma sessão conectada com acesso 'edit' a faturas; uma chave de API recebe 403 HUMAN_SESSION_REQUIRED. As mesmas regras de segregação de funções de RecordPayment.

Campos da resposta

  • remittancesArray

    Todos os avisos de pagamento enviados para a fatura, do mais antigo para o mais recente: { id (RM-…), sentAt, sentByName, note?, file?: { fileName, contentType, sizeBytes } }.

Erros

  • 400 Bad Request - Código REMITTANCE_EMPTY (nem observação nem arquivo), REMITTANCE_NOTE_INVALID (mais de 1.000 caracteres), REMITTANCE_FILE_NAME_INVALID, REMITTANCE_UPLOAD_INCOMPLETE (o fileId não é de um upload feito para esta fatura, ou o upload não terminou: "The proof of payment hasn't finished uploading. Attach it again.") ou REMITTANCE_FILE_TOO_LARGE (mais de 10 MB).
  • 403 Forbidden - Código HUMAN_SESSION_REQUIRED, ou uma recusa por segregação de funções.
  • 404 Not Found - Não existe fatura com este id no espaço de trabalho.
  • 409 Conflict - Código REMITTANCE_NEEDS_PAYMENT (ainda não há pagamento registrado: registre-o antes), REMITTANCE_LIMIT (ela já tem 20) ou PAYMENT_CHANGED.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
  • 403 Forbidden - O token Bearer ou a chave de API de quem chama não dá acesso a este espaço de trabalho (regionId), ou não tem a função exigida.
POST /v1/workspaces/{regionId}/invoices/{invoiceId}/remittance
Requisição
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/remittance" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "note": "string",
   "file": { "fileId": "string", "fileName": "string" }
}
Resposta · 201 Created
{
   "documentType": "invoice" | "debit_note",
   "amendsInvoiceId": "string",
   "amendsExternalInvoiceNumber": "string",
   "debitNoteIds": [ "string" ],
   "replacesInvoiceIds": [ "string" ],
   "replacedByInvoiceIds": [ "string" ],
   "replacement": { "creditedInFull": boolean, "uncredited": number },
   "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
   "id": "string",
   "po": "string",
   "poLineNo": number,
   "billsNoPoLine": true,
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "usageAmount": number,
   "usageCurrency": "string",
   "tolerancePct": number,
   "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
   "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
   "discrepancyReason": "amount" | "currency",
   "paid": boolean,
   "dueInDays": number,
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "createdAt": "string",
   "lastRemindedAt": "string",
   "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
   "replacesInvoiceId": "string",
   "source": "po-flip" | "direct" | "manual" | "feed",
   "submittedFormat": "json" | "cxml" | "ubl",
   "submittedBy": "string",
   "externalInvoiceNumber": "string",
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
   "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
   "rateWarnings": [
      { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
   ],
   "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
   "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
   "invoiceKind": "prepayment",
   "creditNoteIds": [ "string" ],
   "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
   "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
   "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
}

Obter arquivo de aviso de pagamento

Retorna um link de curta duração para o comprovante de pagamento de um aviso de pagamento.

GET/v1/workspaces/{regionId}/invoices/{invoiceId}/remittances/{remittanceId}/file

Parâmetros

  • invoiceIdstringObrigatório

    O identificador da fatura.

  • remittanceIdstringObrigatório

    O aviso de pagamento, por exemplo "RM-1A2B3C4D", dos avisos de pagamento da fatura.

  • buyerstring

    Só para quem chama como Fornecedor, e só necessário depois de um 409 *_ID_AMBIGUOUS: o ID do espaço de trabalho do comprador (terminado em .buyer) ou o id da região, da lista buyers do 409. Só o documento desse comprador é considerado; se não houver nenhum ali, é 404. Um ID de espaço de trabalho .supplier é 400 BUYER_QUALIFIER_INVALID ("The buyer parameter must be one buyer's Workspace ID (ending in .buyer), from the buyers list in the 409 response."). Ignorado para quem chama como Comprador.

Retorna

200 OK com o objeto mostrado na resposta.

Mais detalhes

Um link, válido por 5 minutos, para o comprovante de pagamento que um aviso de pagamento traz, aberto em linha. O fornecedor lê os avisos de pagamento que o comprador enviou na fatura dele; a mesma busca de GetInvoice.

Erros

  • 404 Not Found - Nenhuma fatura com este id, ou código REMITTANCE_NOT_FOUND: a fatura não tem aviso de pagamento com este id que traga um arquivo.
  • 409 Conflict - Só para quem chama como Fornecedor. Código INVOICE_ID_AMBIGUOUS: mais de um dos seus compradores tem uma fatura sua com este id (os ids são únicos só dentro de um comprador), então a Pleaxy não tenta adivinhar a qual você se refere. Nada é lido nem alterado. O campo buyers do corpo lista o ID do espaço de trabalho e o nome de cada comprador: repita a chamada com ?buyer=<esse ID do espaço de trabalho>.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
  • 403 Forbidden - O token Bearer ou a chave de API de quem chama não dá acesso a este espaço de trabalho (regionId), ou não tem a função exigida.
GET /v1/workspaces/{regionId}/invoices/{invoiceId}/remittances/{remittanceId}/file
Requisição
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/remittances/{remittanceId}/file" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Resposta · 200 OK
{
   "url": "string",
   "fileName": "string",
   "contentType": "application/pdf" | "image/png" | "image/jpeg"
}

Obter pagamento via Stripe

Retorna o estado de um pagamento por cartão ou banco pela Pleaxy (ainda não disponível).

GET/v1/workspaces/{regionId}/invoices/{invoiceId}/stripe-payment

Parâmetros

  • invoiceIdstringObrigatório

    O identificador da fatura.

Retorna

200 OK com o objeto mostrado na resposta.

Mais detalhes

Ainda não disponível: o pagamento pela Pleaxy não está ativado, então esta chamada responde available: false com reason not_configured. Quando estiver, ela informa se esta fatura pode ser paga pela Pleaxy com Stripe, ou por que não, e qualquer pagamento Stripe em andamento. quote é o que o comprador pagaria: a fatura mais a tarifa de transferência bancária da Stripe (0,8%, limitada a $5), que o comprador cobre para que o fornecedor receba o valor integral da fatura.

Erros

  • 404 Not Found - Não existe fatura com este id no espaço de trabalho.
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
  • 403 Forbidden - O token Bearer ou a chave de API de quem chama não dá acesso a este espaço de trabalho (regionId), ou não tem a função exigida.
GET /v1/workspaces/{regionId}/invoices/{invoiceId}/stripe-payment
Requisição
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/stripe-payment" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Resposta · 200 OK
{
   "available": boolean,
   "reason": "not_configured" | "not_approved" | "payment_locked" | "supplier_not_on_pleaxy" | "supplier_not_connected" | "unsupported_currency" | "amount_too_small",
   "state": "checkout_open" | "processing" | "succeeded",
   "paymentMethodType": "us_bank_account",
   "quote": { "amount": number, "fee": number, "total": number, "currency": "USD" }
}

Iniciar pagamento via Stripe

Começa a pagar uma fatura pela Pleaxy (ainda não disponível).

POST/v1/workspaces/{regionId}/invoices/{invoiceId}/stripe-payment

Parâmetros

  • invoiceIdstringObrigatório

    O identificador da fatura.

  • confirmReplacedboolean

    true para pagá-la mesmo assim quando a fatura foi substituída (crédito e refaturamento) e as notas de crédito dela não a cobrem por inteiro.

Retorna

201 Created com o objeto mostrado na resposta.

Mais detalhes

Ainda não disponível: o pagamento pela Pleaxy não está ativado, então esta chamada responde 503. Quando estiver, ela começa a pagar uma fatura aprovada por inteiro pela Pleaxy, por transferência bancária nos EUA com Stripe, e retorna a url de uma página do Stripe Checkout. O pagamento é feito na própria conta Stripe do fornecedor: o dinheiro vai da conta bancária do comprador para o fornecedor e nunca passa pela Pleaxy. O comprador paga a fatura mais a tarifa da Stripe, para que o fornecedor receba o valor integral da fatura; a Pleaxy não cobra nada. A fatura fica bloqueada enquanto o Checkout está aberto (até uma hora) e é marcada como paga quando a Stripe confirma a transferência. Retoma um Checkout aberto; responde { state } sem url quando um pagamento já está em processamento ou concluído.

Uma sessão conectada com acesso 'edit' a faturas; uma chave de API recebe 403 HUMAN_SESSION_REQUIRED. As mesmas regras de segregação de funções de RecordPayment.

Erros

  • 403 Forbidden - Código HUMAN_SESSION_REQUIRED, ou uma recusa por segregação de funções.
  • 409 Conflict - Código PAYMENT_ALREADY_RECORDED, PAYMENT_ACTIVE (exportada ou registrada: retire isso antes), REPLACED_UNCREDITED (a fatura foi substituída e as notas de crédito dela não a cobrem por inteiro: adicione ?confirmReplaced=true para pagá-la mesmo assim) ou PAYMENT_CHANGED.
  • 422 Unprocessable Entity - Código STRIPE_SUPPLIER_NOT_ON_PLEAXY, STRIPE_SUPPLIER_NOT_CONNECTED, STRIPE_UNSUPPORTED_CURRENCY ou STRIPE_AMOUNT_TOO_SMALL.
  • 503 Service Unavailable - O pagamento pela Pleaxy não está ativado ("Paying suppliers through Pleaxy isn't available yet.").
  • 401 Unauthorized - Nenhuma credencial foi apresentada, ou o token Bearer / valor de X-Api-Key está ausente, é inválido, expirou ou foi revogado.
  • 403 Forbidden - O token Bearer ou a chave de API de quem chama não dá acesso a este espaço de trabalho (regionId), ou não tem a função exigida.
POST /v1/workspaces/{regionId}/invoices/{invoiceId}/stripe-payment
Requisição
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/stripe-payment" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Resposta · 201 Created
{
   "url": "string",
   "state": "checkout_open" | "processing" | "succeeded"
}

Liquidar fatura

Descontinuada: use RecordPayment.

POST/v1/workspaces/{regionId}/invoices/{invoiceId}/settle

Parâmetros

  • invoiceIdstringObrigatório

    O identificador da fatura.

Retorna

410 Gone com o objeto mostrado na resposta.

Mais detalhes

Descontinuada. Sempre responde 410 SETTLE_REPLACED e não altera nada. Registre um pagamento feito fora da Pleaxy com RecordPayment.

Alterado em 2026-09-24, uma correção de segurança dentro da v1: a liquidação foi restrita a sessões conectadas e depois descontinuada; ela nunca paga nada.

Erros

  • 410 Gone - Código SETTLE_REPLACED, sempre.
POST /v1/workspaces/{regionId}/invoices/{invoiceId}/settle
Requisição
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/settle" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Resposta · 410 Gone
{
   "statusCode": 410,
   "error": "Gone",
   "code": "SETTLE_REPLACED",
   "message": "string",
   "messageId": "invoices.settleReplaced",
   "params": { }
}
Fale conosco