Create a payment request
Creates a payment request and returns a checkout_url the recipient
opens to pay with Apple Pay or card. Funds settle directly to your
connected Stripe account. A payment request is independent of any chat;
to associate one with a chat for your records, store the chat id in
metadata. Requires your connected account to be charges_enabled
(returns 403 otherwise).
Set mode: subscription with a recurring price_id from your connected
Stripe account to start an auto-renewing subscription instead of a
one-time charge — the recipient pays the first invoice at checkout and
the response’s stripe object carries the customer and subscription ids
for the ongoing lifecycle in your own Stripe account. See the
Subscriptions section of the tag overview.
In either mode, pass customer_id to attach the request to an
existing Customer on your connected account instead of creating a
new one — see Pre-created customers in the tag overview.
Parameters
Amount to charge, in the currency’s minor units (e.g. cents). Must be
at least the payment provider’s minimum (50 for usd). Required in
payment mode; must be omitted in subscription mode (the amount
comes from the price).
Three-letter ISO 4217 currency code. Only usd is currently
supported. Required in payment mode; must be omitted in
subscription mode (the currency comes from the price).
Optional id of an existing Customer on your connected Stripe
account (cus_...) to attach this request to, instead of a new
Customer being created. In payment mode the charge lands on that
customer’s payment history; in subscription mode the subscription
is created on them. The customer must exist (and not be deleted) on
your connected account.
Required for rail: natural. The line the request is sent from, in
E.164 format. Must be a phone number your organization owns.
Optional key/value metadata (up to 49 keys) echoed back on retrieval
and on payment.* webhooks, and stamped on the Stripe objects we
create on your connected account (the PaymentIntent, and in
subscription mode the Subscription and any Customer created for
you — a customer you pass via customer_id is never modified) —
use it to correlate a request with your own records (e.g. a chat
id). Keys starting with linq_ are reserved.
Subscription mode only (required there): id of an active recurring
Price on your connected Stripe account (price_...). If you sell
through Stripe Payment Links today, pass the same price the link was
built from to get the native iMessage checkout for it.
Subscription mode only — units of the price to subscribe to.
Subscription mode only — end the free trial at a fixed timestamp
(must be in the future) instead of a day count. Mutually exclusive
with trial_period_days.
Subscription mode only — start with a free trial of this many days.
The recipient’s card is still collected at checkout (Apple Pay or
card), saved to the subscription, and first charged when the trial
ends. Mutually exclusive with trial_end.
Create a payment request
import os
from linq import LinqAPIV3
client = LinqAPIV3(
api_key=os.environ.get("LINQ_API_V3_API_KEY"), # This is the default and can be omitted
)
payment_request = client.payment_requests.create(
amount=497,
currency="usd",
description="Coffee with Ava",
metadata={
"order_id": "order_8675309"
},
)
print(payment_request.id){
"id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"amount": 497,
"checkout_url": "https://zero.linqapp.com/pay/tomo?session=tok_abc123",
"created_at": "2019-12-27T18:11:19.117Z",
"currency": "usd",
"mode": "payment",
"object": "payment_request",
"status": "requested",
"description": "description",
"expires_at": "2019-12-27T18:11:19.117Z",
"interval": "day",
"interval_count": 0,
"metadata": {
"foo": "string"
},
"natural": {
"payment_request_id": "payment_request_id",
"transaction_id": "transaction_id"
},
"paid_at": "2019-12-27T18:11:19.117Z",
"price_id": "price_id",
"quantity": 0,
"rail": "stripe",
"stripe": {
"customer_id": "cus_QAbCdEfGhIjKlMn",
"payment_intent_id": "pi_3QAbCdEfGhIjKlMn",
"subscription_id": "sub_1QAbCdEfGhIjKlMn"
},
"trial_end": "2019-12-27T18:11:19.117Z",
"updated_at": "2019-12-27T18:11:19.117Z"
}{
"error": {
"status": 400,
"code": 1002,
"message": "Phone number must be in E.164 format",
"doc_url": "https://docs.linqapp.com/error/codes/1xxx/1002/"
},
"success": false
}{
"error": {
"status": 401,
"code": 2004,
"message": "Unauthorized - missing or invalid authentication token",
"doc_url": "https://docs.linqapp.com/error/codes/2xxx/2004/"
},
"success": false
}{
"error": {
"status": 403,
"code": 2005,
"message": "Access denied - insufficient permissions for this resource",
"doc_url": "https://docs.linqapp.com/error/codes/2xxx/2005/"
},
"success": false
}{
"error": {
"status": 409,
"code": 2013,
"message": "This chat is unavailable",
"doc_url": "https://docs.linqapp.com/error/codes/2xxx/2013/"
},
"success": false
}{
"error": {
"status": 500,
"code": 3006,
"message": "Internal server error",
"doc_url": "https://docs.linqapp.com/error/codes/3xxx/3006/"
},
"success": false
}Returns Examples
{
"id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
"amount": 497,
"checkout_url": "https://zero.linqapp.com/pay/tomo?session=tok_abc123",
"created_at": "2019-12-27T18:11:19.117Z",
"currency": "usd",
"mode": "payment",
"object": "payment_request",
"status": "requested",
"description": "description",
"expires_at": "2019-12-27T18:11:19.117Z",
"interval": "day",
"interval_count": 0,
"metadata": {
"foo": "string"
},
"natural": {
"payment_request_id": "payment_request_id",
"transaction_id": "transaction_id"
},
"paid_at": "2019-12-27T18:11:19.117Z",
"price_id": "price_id",
"quantity": 0,
"rail": "stripe",
"stripe": {
"customer_id": "cus_QAbCdEfGhIjKlMn",
"payment_intent_id": "pi_3QAbCdEfGhIjKlMn",
"subscription_id": "sub_1QAbCdEfGhIjKlMn"
},
"trial_end": "2019-12-27T18:11:19.117Z",
"updated_at": "2019-12-27T18:11:19.117Z"
}{
"error": {
"status": 400,
"code": 1002,
"message": "Phone number must be in E.164 format",
"doc_url": "https://docs.linqapp.com/error/codes/1xxx/1002/"
},
"success": false
}{
"error": {
"status": 401,
"code": 2004,
"message": "Unauthorized - missing or invalid authentication token",
"doc_url": "https://docs.linqapp.com/error/codes/2xxx/2004/"
},
"success": false
}{
"error": {
"status": 403,
"code": 2005,
"message": "Access denied - insufficient permissions for this resource",
"doc_url": "https://docs.linqapp.com/error/codes/2xxx/2005/"
},
"success": false
}{
"error": {
"status": 409,
"code": 2013,
"message": "This chat is unavailable",
"doc_url": "https://docs.linqapp.com/error/codes/2xxx/2013/"
},
"success": false
}{
"error": {
"status": 500,
"code": 3006,
"message": "Internal server error",
"doc_url": "https://docs.linqapp.com/error/codes/3xxx/3006/"
},
"success": false
}