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 .json suffix or ?format=json

To embed the response in a jsonp callback, append ?callback=myCallback

HTTP + JSON

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"}