sfgboxapi

<back to all web services

CreateSubscribeCustomer

Requires Authentication
The following routes are available for this service:
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 .jsv suffix or ?format=jsv

HTTP + JSV

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: text/jsv
Content-Type: text/jsv
Content-Length: length

{
	email: String
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	accountBalance: 0,
	businessVatId: String,
	created: 0001-01-01,
	defaultSource: String,
	delinquent: False,
	description: String,
	discount: 
	{
		customer: String,
		coupon: 
		{
			amountOff: 0,
			created: 0001-01-01,
			currency: String,
			duration: forever,
			durationInMonths: 0,
			livemode: False,
			maxRedemptions: 0,
			metadata: 
			{
				String: String
			},
			percentOff: 0,
			redeemBy: 0001-01-01,
			timesRedeemed: 0,
			valid: False,
			id: String,
			object: unknown
		},
		start: 0001-01-01,
		end: 0001-01-01,
		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: 0001-01-01,
				status: Unknown,
				plan: 
				{
					amount: 0,
					created: 0001-01-01,
					currency: String,
					interval: month,
					intervalCount: 0,
					livemode: False,
					metadata: 
					{
						String: String
					},
					nickname: String,
					product: String,
					trialPeriodDays: 0,
					id: String,
					object: unknown
				},
				currentPeriodStart: 0001-01-01,
				start: 0001-01-01,
				trialStart: 0001-01-01,
				cancelAtPeriodEnd: False,
				trialEnd: 0001-01-01,
				canceledAt: 0001-01-01,
				endedAt: 0001-01-01,
				customer: String,
				quantity: 0,
				id: String,
				object: unknown
			}
		],
		id: String,
		object: unknown
	},
	deleted: False,
	currency: String,
	id: String,
	object: unknown
}