Getting Invoice Details and Transactions
Learn how to retrieve complete invoice information including payment transactions, customer details, and line items.
Basic Invoice Retrieval
Get Invoice by ID
Retrieve detailed information for a specific invoice:
from abstra.connectors import run_connection_action
connection_name = "paypal"
# Get invoice details
invoice_id = "INV2-XXXX-XXXX-XXXX-XXXX"
result = run_connection_action(connection_name,
"invoicing/get_v2_invoicing_invoices_by_invoice_id",
params={"invoice_id": invoice_id}
)
if result["status"] == "success":
invoice = result
print(f"Invoice Number: {invoice['detail']['invoice_number']}")
print(f"Status: {invoice['status']}")
print(f"Invoice Date: {invoice['detail']['invoice_date']}")
print(f"Total Amount: ${invoice['amount']['value']} {invoice['amount']['currency_code']}")
print(f"Amount Paid: ${invoice.get('payments', {}).get('paid_amount', {}).get('value', '0.00')}")
print(f"Amount Due: ${invoice['due_amount']['value']}")
Expected Output:
Invoice Number: SCRANTON-2024-001
Status: PAID
Invoice Date: 2024-09-29
Total Amount: $1,234.56 USD
Amount Paid: $1,234.56
Amount Due: $0.00
Get Invoice from List
Find and retrieve a specific invoice by invoice number:
from abstra.connectors import run_connection_action
connection_name = "paypal"
# First, list all invoices
list_result = run_connection_action(connection_name, "invoicing/get_v2_invoicing_invoices")
if list_result["status"] == "success":
invoices = list_result["items"]
# Find specific invoice by number
invoice_number = "SCRANTON-2024-001"
target_invoice = next(
(inv for inv in invoices if inv["detail"]["invoice_number"] == invoice_number),
None
)
if target_invoice:
# Get full details
detail_result = run_connection_action(connection_name,
"invoicing/get_v2_invoicing_invoices_by_invoice_id",
params={"invoice_id": target_invoice["id"]}
)
if detail_result["status"] == "success":
invoice = detail_result
print(f"Found invoice: {invoice['id']}")
else:
print(f"Invoice {invoice_number} not found")
Viewing Transaction Details
Extract Payment Transactions
Get detailed payment transaction information:
from abstra.connectors import run_connection_action
connection_name = "paypal"
invoice_id = "INV2-XXXX-XXXX-XXXX-XXXX"
result = run_connection_action(connection_name,
"invoicing/get_v2_invoicing_invoices_by_invoice_id",
params={"invoice_id": invoice_id}
)
if result["status"] == "success":
invoice = result
print(f"Invoice: {invoice['detail']['invoice_number']}")
print(f"Status: {invoice['status']}")
# Check if invoice has payments
if "payments" in invoice and "transactions" in invoice["payments"]:
transactions = invoice["payments"]["transactions"]
print(f"\nPayment Transactions: {len(transactions)}")
for tx in transactions:
print(f"\n Transaction ID: {tx['payment_id']}")
print(f" Date: {tx['payment_date']}")
print(f" Time: {tx['payment_date_time']}")
print(f" Amount: ${tx['amount']['value']} {tx['amount']['currency_code']}")
print(f" Method: {tx['method']}")
print(f" Type: {tx['type']}")
print(f" Status: {tx['transaction_status']}")
else:
print("\nNo payment transactions found (invoice may not be paid yet)")
Expected Output:
Invoice: SCRANTON-2024-001
Status: PAID
Payment Transactions: 1
Transaction ID: 8KK88511SC5373202
Date: 2024-10-08
Time: 2024-10-08T08:08:11Z
Amount: $1,234.56 USD
Method: PAYPAL
Type: PAYPAL
Status: SUCCESS
Track Payment History
Show complete payment history for an invoice:
from abstra.connectors import run_connection_action
from datetime import datetime
connection_name = "paypal"
invoice_id = "INV2-XXXX-XXXX-XXXX-XXXX"
result = run_connection_action(connection_name,
"invoicing/get_v2_invoicing_invoices_by_invoice_id",
params={"invoice_id": invoice_id}
)
if result["status"] == "success":
invoice = result
print(f"Payment History for {invoice['detail']['invoice_number']}")
print(f"Total Amount: ${invoice['amount']['value']}")
print(f"Amount Due: ${invoice['due_amount']['value']}")
if "payments" in invoice:
payments = invoice["payments"]
if "paid_amount" in payments:
print(f"Total Paid: ${payments['paid_amount']['value']}")
if "transactions" in payments:
print(f"\nTransactions:")
for tx in sorted(payments["transactions"], key=lambda x: x["payment_date_time"]):
date = datetime.strptime(tx["payment_date_time"], "%Y-%m-%dT%H:%M:%SZ")
print(f" {date.strftime('%Y-%m-%d %H:%M')}: ${tx['amount']['value']} ({tx['transaction_status']})")
Expected Output:
Payment History for SCRANTON-2024-001
Total Amount: $1,234.56
Amount Due: $0.00
Total Paid: $1,234.56
Transactions:
2024-10-08 08:08: $1,234.56 (SUCCESS)
Customer Information
Extract Customer Details
Get complete customer information from invoice:
from abstra.connectors import run_connection_action
connection_name = "paypal"
invoice_id = "INV2-XXXX-XXXX-XXXX-XXXX"
result = run_connection_action(connection_name,
"invoicing/get_v2_invoicing_invoices_by_invoice_id",
params={"invoice_id": invoice_id}
)
if result["status"] == "success":
invoice = result
# Invoicer (sender) information
print("From:")
invoicer = invoice["invoicer"]
if "business_name" in invoicer:
print(f" Business: {invoicer['business_name']}")
if "name" in invoicer:
print(f" Name: {invoicer['name']['full_name']}")
print(f" Email: {invoicer['email_address']}")
# Customer (recipient) information
print("\nTo:")
recipient = invoice["primary_recipients"][0]["billing_info"]
if "business_name" in recipient:
print(f" Business: {recipient['business_name']}")
if "name" in recipient:
print(f" Name: {recipient['name'].get('full_name', 'N/A')}")
print(f" Email: {recipient['email_address']}")
if "language" in recipient:
print(f" Language: {recipient['language']}")
Expected Output:
From:
Business: Dunder Mifflin Paper Company
Name: Michael Scott
Email: accounting@dundermifflin.com
To:
Business: Schrute Farms
Name: Dwight Schrute
Email: dwight@schrutefarms.com
Language: en-US
Invoice Items
List Line Items
View all items/services on the invoice:
from abstra.connectors import run_connection_action
connection_name = "paypal"
invoice_id = "INV2-XXXX-XXXX-XXXX-XXXX"
result = run_connection_action(connection_name,
"invoicing/get_v2_invoicing_invoices_by_invoice_id",
params={"invoice_id": invoice_id}
)
if result["status"] == "success":
invoice = result
print(f"Invoice: {invoice['detail']['invoice_number']}")
print(f"\nLine Items:")
if "items" in invoice:
for item in invoice["items"]:
print(f"\n Item ID: {item['id']}")
print(f" Name: {item['name']}")
print(f" Quantity: {item['quantity']}")
print(f" Unit Price: ${item['unit_amount']['value']} {item['unit_amount']['currency_code']}")
# Calculate line total
total = float(item['quantity']) * float(item['unit_amount']['value'])
print(f" Line Total: ${total:.2f}")
if "description" in item:
print(f" Description: {item['description']}")
Expected Output:
Invoice: SCRANTON-2024-001
Line Items:
Item ID: ITEM-19D94520W43633820
Name: Premium Paper - A4
Quantity: 100
Unit Price: $12.34 USD
Line Total: $1234.00
Description: High-quality office paper
Calculate Breakdown
Show complete amount breakdown:
from abstra.connectors import run_connection_action
connection_name = "paypal"
invoice_id = "INV2-XXXX-XXXX-XXXX-XXXX"
result = run_connection_action(connection_name,
"invoicing/get_v2_invoicing_invoices_by_invoice_id",
params={"invoice_id": invoice_id}
)
if result["status"] == "success":
invoice = result
amount = invoice["amount"]
print(f"Invoice: {invoice['detail']['invoice_number']}")
print(f"\nAmount Breakdown:")
if "breakdown" in amount:
breakdown = amount["breakdown"]
# Item total
if "item_total" in breakdown:
print(f" Subtotal: ${breakdown['item_total']['value']}")
# Discount
if "discount" in breakdown:
invoice_discount = breakdown["discount"].get("invoice_discount", {}).get("amount", {}).get("value", "0.00")
item_discount = breakdown["discount"].get("item_discount", {}).get("value", "0.00")
total_discount = float(invoice_discount) + float(item_discount)
if total_discount > 0:
print(f" Discount: -${total_discount:.2f}")
# Tax
if "tax_total" in breakdown:
print(f" Tax: ${breakdown['tax_total']['value']}")
# Shipping
if "shipping" in breakdown:
print(f" Shipping: ${breakdown['shipping']['amount']['value']}")
# Final total
print(f"\n Total: ${amount['value']} {amount['currency_code']}")
Expected Output:
Invoice: SCRANTON-2024-001
Amount Breakdown:
Subtotal: $1234.00
Tax: $0.56
Total: $1234.56 USD
Invoice Metadata
View Invoice Metadata
Get additional invoice information:
from abstra.connectors import run_connection_action
from datetime import datetime
connection_name = "paypal"
invoice_id = "INV2-XXXX-XXXX-XXXX-XXXX"
result = run_connection_action(connection_name,
"invoicing/get_v2_invoicing_invoices_by_invoice_id",
params={"invoice_id": invoice_id}
)
if result["status"] == "success":
invoice = result
detail = invoice["detail"]
metadata = detail.get("metadata", {})
print(f"Invoice Metadata:")
print(f" Invoice Number: {detail['invoice_number']}")
print(f" Invoice Date: {detail['invoice_date']}")
if "payment_term" in detail:
if "due_date" in detail["payment_term"]:
print(f" Due Date: {detail['payment_term']['due_date']}")
if "term_type" in detail["payment_term"]:
print(f" Payment Terms: {detail['payment_term']['term_type']}")
if metadata:
print(f"\n Created: {metadata.get('create_time', 'N/A')}")
print(f" Last Updated: {metadata.get('last_update_time', 'N/A')}")
print(f" First Sent: {metadata.get('first_sent_time', 'N/A')}")
print(f" Last Sent: {metadata.get('last_sent_time', 'N/A')}")
print(f" Viewed by Recipient: {detail.get('viewed_by_recipient', False)}")
# URLs
if "invoicer_view_url" in metadata:
print(f"\n Invoicer URL: {metadata['invoicer_view_url']}")
if "recipient_view_url" in metadata:
print(f" Recipient URL: {metadata['recipient_view_url']}")
Expected Output:
Invoice Metadata:
Invoice Number: SCRANTON-2024-001
Invoice Date: 2024-09-29
Due Date: 2024-10-10
Payment Terms: DUE_ON_DATE_SPECIFIED
Created: 2024-09-29T14:28:13Z
Last Updated: 2024-10-08T15:08:11Z
First Sent: 2024-09-29T14:29:37Z
Last Sent: 2024-09-29T14:29:37Z
Viewed by Recipient: False
Invoicer URL: https://www.paypal.com/invoice/details/INV2-XXXX-XXXX-XXXX-XXXX
Recipient URL: https://www.paypal.com/invoice/p/#XXXXXXXXXXXX
Complete Invoice Report
Generate Full Invoice Report
Create a comprehensive invoice report:
from abstra.connectors import run_connection_action
from datetime import datetime
def print_invoice_report(invoice_id: str):
"""
Print a complete invoice report with all details.
"""
connection_name = "paypal"
result = run_connection_action(connection_name,
"invoicing/get_v2_invoicing_invoices_by_invoice_id",
params={"invoice_id": invoice_id}
)
if result["status"] != "success":
print(f"Error: {result.get('message')}")
return
invoice = result
detail = invoice["detail"]
# Header
print("=" * 60)
print(f"INVOICE: {detail['invoice_number']}")
print("=" * 60)
# Status
print(f"\nStatus: {invoice['status']}")
print(f"Invoice Date: {detail['invoice_date']}")
if "payment_term" in detail and "due_date" in detail["payment_term"]:
print(f"Due Date: {detail['payment_term']['due_date']}")
# Parties
print(f"\nFrom: {invoice['invoicer']['email_address']}")
print(f"To: {invoice['primary_recipients'][0]['billing_info']['email_address']}")
# Items
print(f"\nItems:")
if "items" in invoice:
for item in invoice["items"]:
qty = item['quantity']
price = float(item['unit_amount']['value'])
total = float(qty) * price
print(f" {item['name']}: {qty} x ${price:.2f} = ${total:.2f}")
# Amounts
print(f"\nTotal: ${invoice['amount']['value']} {invoice['amount']['currency_code']}")
print(f"Amount Paid: ${invoice.get('payments', {}).get('paid_amount', {}).get('value', '0.00')}")
print(f"Amount Due: ${invoice['due_amount']['value']}")
# Transactions
if "payments" in invoice and "transactions" in invoice["payments"]:
print(f"\nTransactions:")
for tx in invoice["payments"]["transactions"]:
print(f" {tx['payment_date']}: ${tx['amount']['value']} via {tx['method']} ({tx['transaction_status']})")
print("=" * 60)
# Usage
print_invoice_report("INV2-XXXX-XXXX-XXXX-XXXX")
Expected Output:
============================================================
INVOICE: SCRANTON-2024-001
============================================================
Status: PAID
Invoice Date: 2024-09-29
Due Date: 2024-10-10
From: accounting@dundermifflin.com
To: dwight@schrutefarms.com
Items:
Premium Paper - A4: 100 x $12.34 = $1234.00
Total: $1234.56 USD
Amount Paid: $1234.56
Amount Due: $0.00
Transactions:
2024-10-08: $1234.56 via PAYPAL (SUCCESS)
============================================================
Best Practices
- Check Invoice Exists: Always handle cases where invoice might not be found
- Handle Missing Fields: Use
.get()for optional fields like transactions - Parse Dates Properly: Use datetime for date comparisons and formatting
- Check Payment Status: Verify invoice is paid before accessing transactions
- Cache Details: Store invoice details locally if accessing multiple times
Next Steps
- Listing and Searching Invoices - Learn how to find invoices