Skip to content

Instantly share code, notes, and snippets.

@gautierdag
Created May 31, 2020 17:35
Show Gist options
  • Save gautierdag/eeca20bf945e881e12ceb65ab5b7bf13 to your computer and use it in GitHub Desktop.
Save gautierdag/eeca20bf945e881e12ceb65ab5b7bf13 to your computer and use it in GitHub Desktop.
Plaid Python Pydantic Models
import datetime
from typing import Optional, List
from pydantic import BaseModel
class PlaidBalance(BaseModel):
current: float
available: Optional[float]
iso_currency_code: Optional[str]
limit: Optional[float]
unofficial_currency_code: Optional[str]
class PlaidHistoricalBalance(BaseModel):
date: datetime.date
current: float
iso_currency_code: Optional[str]
unofficial_currency_code: Optional[str]
class PlaidPhoneNumber(BaseModel):
data: str
primary: bool
type: str
class PlaidEmail(BaseModel):
data: str
primary: bool
type: str
class PlaidAdressData(BaseModel):
city: str
region: str
street: str
postal_code: str
country: str
class PlaidAddress(BaseModel):
data: PlaidAdressData
primary: bool
class PlaidOwner(BaseModel):
names: List[str] = []
phone_numbers: List[PlaidPhoneNumber] = []
emails: List[PlaidEmail] = []
addresses: List[PlaidAddress] = []
class PlaidLocation(BaseModel):
address: Optional[str]
city: Optional[str]
region: Optional[str]
postal_code: Optional[str]
country: Optional[str]
lat: Optional[float]
lon: Optional[float]
store_number: Optional[int]
class PlaidPaymentMeta(BaseModel):
reference_number: Optional[str]
ppd_id: Optional[str]
payee: Optional[str]
class PlaidTransaction(BaseModel):
account_id: str
transaction_id: str
date: datetime.date
original_description: str
pending: bool
amount: float
iso_currency_code: Optional[str]
unofficial_currency_code: Optional[str]
account_owner: Optional[str]
category: Optional[List[str]]
category_id: Optional[str]
date_transacted: Optional[str]
location: Optional[PlaidLocation]
name: Optional[str]
payment_meta: Optional[PlaidPaymentMeta]
pending_transaction_id: Optional[str]
transaction_type: Optional[str]
class PlaidAccount(BaseModel):
account_id: str
mask: Optional[str]
name: str
official_name: Optional[str]
type: str
subtype: str
owners: List[PlaidOwner]
balances: PlaidBalance
historical_balances: List[PlaidHistoricalBalance] = []
transactions: List[PlaidTransaction] = []
days_available: int
class PlaidError(BaseModel):
error_type: str
error_code: str
error_message: str
display_message: Optional[str]
class PlaidItem(BaseModel):
item_id: str
institution_name: Optional[str]
institution_id: Optional[str]
date_last_updated: Optional[datetime.datetime]
accounts: List[PlaidAccount] = []
available_products: List[str] = []
billed_products: List[str] = []
webhook: Optional[str]
consent_expiration_time: Optional[str]
error: Optional[PlaidError]
class PlaidACHNumbers(BaseModel):
account_id: str
account: str
routing: str
wire_routing: Optional[str]
class PlaidEFTNumbers(BaseModel):
account_id: str
account: str
institution: str
branch: str
class PlaidInternationalNumbers(BaseModel):
account_id: str
iban: str
bic: str
class PlaidBACSNumbers(BaseModel):
account_id: str
account: str
sort_code: str
class PlaidNumbers(BaseModel):
ach: List[PlaidACHNumbers] = []
bacs: List[PlaidBACSNumbers] = []
eft: List[PlaidEFTNumbers] = []
international: List[PlaidInternationalNumbers] = []
class PlaidAuthRequest(BaseModel):
accounts: List[PlaidAccount]
item: PlaidItem
numbers: PlaidNumbers
request_id: str
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment