| POST | /signup/api/nat/{natID}/group/{groupID}/subscription | ||
|---|---|---|---|
| POST | /signup/api/nat/{natID}/group/{groupID}/{userType}/user/{userID}/subscription |
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
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SubscriberFormField:
name: Optional[str] = None
value: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SubscriberFormData:
form_template_i_d: Optional[int] = None
signup_type_i_d: Optional[int] = None
form_fields: Optional[List[SubscriberFormField]] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SubscriptionInformation:
frequency_i_d: Optional[int] = None
subscription_invoice_i_d: Optional[int] = None
auto_renew: Optional[bool] = None
has_agreed_to_terms: Optional[bool] = None
client_subscriber_id: Optional[str] = None
renewed_member_subscription_inv_i_d: Optional[int] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ClientVerification:
provider: Optional[str] = None
verification_code: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CcPaymentInformation:
card_number: Optional[str] = None
cvv: Optional[str] = None
exp_month: Optional[int] = None
exp_year: Optional[int] = None
cardholder_name: Optional[str] = None
country: Optional[str] = None
billing_address: Optional[str] = None
address1: Optional[str] = None
address2: Optional[str] = None
city: Optional[str] = None
state_province: Optional[str] = None
postal_code: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AchPaymentInformation:
account_holder_name: Optional[str] = None
check_number: Optional[str] = None
routing_number: Optional[str] = None
account_number: Optional[str] = None
account_type: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CampaignInformation:
campaign_id: Optional[int] = None
campaign_name: Optional[str] = None
amount: Optional[Decimal] = None
chap_pay_i_d: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BillMeLaterInformation:
is_bill_me_later_payment: Optional[bool] = None
is_bill_me_later_subscription: Optional[bool] = None
member_subscription_inv_id: Optional[int] = None
campaigns: Optional[List[CampaignInformation]] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SubscriptionCreateRq:
nat_i_d: Optional[int] = None
group_i_d: Optional[int] = None
client_group_i_d: Optional[str] = None
user_type: Optional[str] = None
user_i_d: Optional[str] = None
form_data: Optional[SubscriberFormData] = None
subscription_info: Optional[SubscriptionInformation] = None
verification_info: Optional[ClientVerification] = None
cc_payment_info: Optional[CcPaymentInformation] = None
ach_payment_info: Optional[AchPaymentInformation] = None
bill_me_later: Optional[BillMeLaterInformation] = None
campaigns: Optional[List[CampaignInformation]] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SubscriptionCreateRs:
is_success: Optional[bool] = None
unique_id: Optional[str] = None
created_date_time: Optional[datetime.datetime] = None
client_id: Optional[int] = None
billhighway_user_id: Optional[int] = None
confirmation_number: Optional[str] = None
payment_confirmation_number: Optional[int] = None
subscription_confirmation_number: Optional[int] = None
error_code: Optional[str] = None
message: Optional[str] = None
friendly_message: Optional[str] = None
Python SubscriptionCreateRq DTOs
To override the Content-type in your clients, use the HTTP Accept Header, append the .csv suffix or ?format=csv
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /signup/api/nat/{natID}/group/{groupID}/subscription HTTP/1.1
Host: devapi.billhighway.com
Accept: text/csv
Content-Type: text/csv
Content-Length: length
{"NatID":0,"GroupID":0,"ClientGroupID":"String","UserType":"String","UserID":"String","FormData":{"FormTemplateID":0,"SignupTypeID":0,"FormFields":[{"FormTemplateFieldID":0,"Name":"String","Value":"String"}]},"SubscriptionInfo":{"FrequencyID":0,"SubscriptionInvoiceID":0,"AutoRenew":false,"HasAgreedToTerms":false,"ClientSubscriberId":"String","RenewedMemberSubscriptionInvID":0},"VerificationInfo":{"Provider":"String","VerificationCode":"String"},"CcPaymentInfo":{"CardNumber":"String","Cvv":"String","ExpMonth":0,"ExpYear":0,"CardholderName":"String","Country":"String","BillingAddress":"String","Address1":"String","Address2":"String","City":"String","StateProvince":"String","PostalCode":"String"},"AchPaymentInfo":{"AccountHolderName":"String","CheckNumber":"String","RoutingNumber":"String","AccountNumber":"String","AccountType":"String"},"BillMeLater":{"IsBillMeLaterPayment":false,"IsBillMeLaterSubscription":false,"MemberSubscriptionInvId":0,"Campaigns":[{"CampaignId":0,"CampaignName":"String","Amount":0,"ChapPayID":"String"}]},"Campaigns":[{"CampaignId":0,"CampaignName":"String","Amount":0,"ChapPayID":"String"}]}
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Length: length
{"IsSuccess":false,"UniqueId":"String","CreatedDateTime":"0001-01-01T00:00:00.0000000","ClientId":0,"BillhighwayUserId":0,"ConfirmationNumber":"String","PaymentConfirmationNumber":0,"SubscriptionConfirmationNumber":0,"ErrorCode":"String","Message":"String","FriendlyMessage":"String"}