| POST | /create-customer |
|---|
import datetime
import decimal
from marshmallow.fields import *
from servicestack import *
from typing import *
from dataclasses import dataclass, field
from dataclasses_json import dataclass_json, LetterCase, Undefined, config
from enum import Enum, IntEnum
class StripeType(str, Enum):
UNKNOWN = 'unknown'
ACCOUNT = 'account'
CARD = 'card'
CHARGE = 'charge'
COUPON = 'coupon'
CUSTOMER = 'customer'
DISCOUNT = 'discount'
DISPUTE = 'dispute'
EVENT = 'event'
INVOICEITEM = 'invoiceitem'
INVOICE = 'invoice'
LINE_ITEM = 'line_item'
PLAN = 'plan'
SUBSCRIPTION = 'subscription'
TOKEN = 'token'
TRANSFER = 'transfer'
LIST = 'list'
PRODUCT = 'product'
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeObject:
object: Optional[StripeType] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeId(StripeObject):
id: Optional[str] = None
class StripeCouponDuration(str, Enum):
FOREVER = 'forever'
ONCE = 'once'
REPEATING = 'repeating'
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeCoupon(StripeId):
amount_off: Optional[int] = None
created: Optional[datetime.datetime] = None
currency: Optional[str] = None
duration: Optional[StripeCouponDuration] = None
duration_in_months: Optional[int] = None
livemode: bool = False
max_redemptions: Optional[int] = None
metadata: Optional[Dict[str, str]] = None
percent_off: Optional[int] = None
redeem_by: Optional[datetime.datetime] = None
times_redeemed: int = 0
valid: bool = False
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeDiscount(StripeId):
customer: Optional[str] = None
coupon: Optional[StripeCoupon] = None
start: Optional[datetime.datetime] = None
end: Optional[datetime.datetime] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeAddress:
city: Optional[str] = None
country: Optional[str] = None
line1: Optional[str] = None
line2: Optional[str] = None
postal_code: Optional[str] = None
state: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeShipping:
address: Optional[StripeAddress] = None
name: Optional[str] = None
phone: Optional[str] = None
class StripeCvcCheck(str, Enum):
UNKNOWN = 'Unknown'
PASS_ = 'Pass'
FAIL = 'Fail'
UNCHECKED = 'Unchecked'
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeCard(StripeId):
brand: Optional[str] = None
number: Optional[str] = None
last4: Optional[str] = None
dynamic_last4: Optional[str] = None
exp_month: int = 0
exp_year: int = 0
cvc: Optional[str] = None
name: Optional[str] = None
address_city: Optional[str] = None
address_country: Optional[str] = None
address_line1: Optional[str] = None
address_line2: Optional[str] = None
address_state: Optional[str] = None
address_zip: Optional[str] = None
cvc_check: Optional[StripeCvcCheck] = None
address_line1_check: Optional[str] = None
address_zip_check: Optional[str] = None
funding: Optional[str] = None
fingerprint: Optional[str] = None
customer: Optional[str] = None
country: Optional[str] = None
class StripeSubscriptionStatus(str, Enum):
UNKNOWN = 'Unknown'
TRIALING = 'Trialing'
ACTIVE = 'Active'
PAST_DUE = 'PastDue'
CANCELED = 'Canceled'
UNPAID = 'Unpaid'
class StripePlanInterval(str, Enum):
MONTH = 'month'
YEAR = 'year'
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripePlan(StripeId):
amount: int = 0
created: Optional[datetime.datetime] = None
currency: Optional[str] = None
interval: Optional[StripePlanInterval] = None
interval_count: Optional[int] = None
livemode: bool = False
metadata: Optional[Dict[str, str]] = None
nickname: Optional[str] = None
product: Optional[str] = None
trial_period_days: Optional[int] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeSubscription(StripeId):
current_period_end: Optional[datetime.datetime] = None
status: Optional[StripeSubscriptionStatus] = None
plan: Optional[StripePlan] = None
current_period_start: Optional[datetime.datetime] = None
start: Optional[datetime.datetime] = None
trial_start: Optional[datetime.datetime] = None
cancel_at_period_end: Optional[bool] = None
trial_end: Optional[datetime.datetime] = None
canceled_at: Optional[datetime.datetime] = None
ended_at: Optional[datetime.datetime] = None
customer: Optional[str] = None
quantity: int = 0
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeCustomer(StripeId):
account_balance: int = 0
business_vat_id: Optional[str] = None
created: Optional[datetime.datetime] = None
default_source: Optional[str] = None
delinquent: Optional[bool] = None
description: Optional[str] = None
discount: Optional[StripeDiscount] = None
email: Optional[str] = None
invoice_prefix: Optional[str] = None
livemode: bool = False
metadata: Optional[Dict[str, str]] = None
shipping: Optional[StripeShipping] = None
sources: Optional[StripeCollection[StripeCard]] = None
subscriptions: Optional[StripeCollection[StripeSubscription]] = None
deleted: bool = False
currency: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CreateSubscribeCustomer(IPost):
email: Optional[str] = None
T = TypeVar('T')
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeCollection(Generic[T], StripeId):
url: Optional[str] = None
total_count: int = 0
has_more: Optional[bool] = None
data: Optional[List[T]] = None
Python CreateSubscribeCustomer DTOs
To override the Content-type in your clients, use the HTTP Accept Header, append the .json suffix or ?format=json
To embed the response in a jsonp callback, append ?callback=myCallback
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /create-customer HTTP/1.1
Host: api.sfgtec.com
Accept: application/json
Content-Type: application/json
Content-Length: length
{"email":"String"}
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: length
{"accountBalance":0,"businessVatId":"String","created":"\/Date(-62135596800000-0000)\/","defaultSource":"String","delinquent":false,"description":"String","discount":{"customer":"String","coupon":{"amountOff":0,"created":"\/Date(-62135596800000-0000)\/","currency":"String","duration":"forever","durationInMonths":0,"livemode":false,"maxRedemptions":0,"metadata":{"String":"String"},"percentOff":0,"redeemBy":"\/Date(-62135596800000-0000)\/","timesRedeemed":0,"valid":false,"id":"String","object":"unknown"},"start":"\/Date(-62135596800000-0000)\/","end":"\/Date(-62135596800000-0000)\/","id":"String","object":"unknown"},"email":"String","invoicePrefix":"String","livemode":false,"metadata":{"String":"String"},"shipping":{"address":{"city":"String","country":"String","line1":"String","line2":"String","postalCode":"String","state":"String"},"name":"String","phone":"String"},"sources":{"url":"String","totalCount":0,"hasMore":false,"data":[{"brand":"String","number":"String","last4":"String","dynamicLast4":"String","expMonth":0,"expYear":0,"cvc":"String","name":"String","addressCity":"String","addressCountry":"String","addressLine1":"String","addressLine2":"String","addressState":"String","addressZip":"String","cvcCheck":"Unknown","addressLine1Check":"String","addressZipCheck":"String","funding":"String","fingerprint":"String","customer":"String","country":"String","id":"String","object":"unknown"}],"id":"String","object":"unknown"},"subscriptions":{"url":"String","totalCount":0,"hasMore":false,"data":[{"currentPeriodEnd":"\/Date(-62135596800000-0000)\/","status":"Unknown","plan":{"amount":0,"created":"\/Date(-62135596800000-0000)\/","currency":"String","interval":"month","intervalCount":0,"livemode":false,"metadata":{"String":"String"},"nickname":"String","product":"String","trialPeriodDays":0,"id":"String","object":"unknown"},"currentPeriodStart":"\/Date(-62135596800000-0000)\/","start":"\/Date(-62135596800000-0000)\/","trialStart":"\/Date(-62135596800000-0000)\/","cancelAtPeriodEnd":false,"trialEnd":"\/Date(-62135596800000-0000)\/","canceledAt":"\/Date(-62135596800000-0000)\/","endedAt":"\/Date(-62135596800000-0000)\/","customer":"String","quantity":0,"id":"String","object":"unknown"}],"id":"String","object":"unknown"},"deleted":false,"currency":"String","id":"String","object":"unknown"}