DATA
Stripe
The Stripe connection object
Stripe Connect: the connection, the import and its settings.
ATTRIBUTES
- object enum
- stripe_connection
- id string
- stripe_account_id string
- livemode boolean
- status enum
- active
- revoked
- error
- smart_retries_mode enum
stripe: keep Stripe Smart Retries. nochurn: NoChurn schedules the retries (turn Smart Retries off in Stripe).
- stripe
- nochurn
- internal_id object | null
Where NoChurn reads your app's id for a customer (your user id, stored as external_id) in this tool; null for a tool that carries none (stores, universal webhook). Nothing found: the email decides.
Show child attributesHide child attributes
- backfill object
Show child attributesHide child attributes
Show 5 more attributesHide 5 attributes
- history object
12-month history import (invoices and payment attempts), after the backfill.
Show child attributesHide child attributes
- last_webhook_type string | null
Type of the newest Stripe event received for this connection; null before the first.
Schema: StripeConnection
THE STRIPE CONNECTION OBJECT
{
"object": "stripe_connection",
"id": "scn_3oj4t6Cs5RBTByvp",
"stripe_account_id": "acct_A",
"livemode": false,
"status": "active",
"smart_retries_mode": "stripe",
"internal_id": {
"field": null,
"defaults": ["metadata.user_id"],
"fields": ["metadata.<name>"]
},
"backfill": {
"status": "done",
"progress": {
"customers": 3
},
"error": null,
"started_at": null,
"finished_at": null
},
"history": {
"status": "pending",
"since": null,
"progress": {},
"error": null,
"started_at": null,
"finished_at": null
},
"last_webhook_at": "2026-11-04T09:58:00.000Z",
"last_webhook_type": "invoice.payment_failed",
"disconnected_at": null,
"created_at": "2026-11-04T10:00:00.000Z"
} Choose who handles payment retries, or where your user id is read
- Secret key (
nc_test_…ornc_live_…). Restricted keys need write access. - AI apps (OAuth): not available.
PATH PARAMETERS
BODY PARAMETERS
- smart_retries_mode enum
- stripe
- nochurn
- internal_id_field string | null
Owner / admin. The Stripe customer metadata key holding your app's id (metadata.<key>); null = metadata.<account external_id_metadata_key>.
RETURNS
-
200updated — the Stripe connection object
ERRORS
-
422invalid_request invalid mode
PATCH/v1/stripe_connections/{id}
curl https://api.nochurn.sh/v1/stripe_connections/scn_4MU3M4xF2KByearr \
-X PATCH \
-H "Authorization: Bearer nc_test_…" \
-H "Content-Type: application/json" \
-d '{
"smart_retries_mode": "nochurn"
}'const res = await fetch("https://api.nochurn.sh/v1/stripe_connections/scn_4MU3M4xF2KByearr", {
method: "PATCH",
headers: {
Authorization: "Bearer nc_test_…",
"Content-Type": "application/json",
},
body: JSON.stringify({
"smart_retries_mode": "nochurn"
}),
});
const stripeConnection = await res.json();import requests
res = requests.patch(
"https://api.nochurn.sh/v1/stripe_connections/scn_4MU3M4xF2KByearr",
headers={
"Authorization": "Bearer nc_test_…",
},
json={
"smart_retries_mode": "nochurn"
},
)
stripe_connection = res.json()require "net/http"
require "json"
uri = URI("https://api.nochurn.sh/v1/stripe_connections/scn_4MU3M4xF2KByearr")
req = Net::HTTP::Patch.new(uri)
req["Authorization"] = "Bearer nc_test_…"
req["Content-Type"] = "application/json"
req.body = {
"smart_retries_mode" => "nochurn"
}.to_json
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
stripe_connection = JSON.parse(res.body) RESPONSE 200
{
"object": "stripe_connection",
"id": "scn_4MU3M4xF2KByearr",
"stripe_account_id": "acct_A",
"livemode": false,
"status": "active",
"smart_retries_mode": "nochurn",
"internal_id": {
"field": null,
"defaults": ["metadata.user_id"],
"fields": ["metadata.<name>"]
},
"backfill": {
"status": "done",
"progress": {
"customers": 3
},
"error": null,
"started_at": null,
"finished_at": null
},
"history": {
"status": "pending",
"since": null,
"progress": {},
"error": null,
"started_at": null,
"finished_at": null
},
"last_webhook_at": null,
"last_webhook_type": null,
"disconnected_at": null,
"created_at": "2026-11-04T10:00:00.000Z"
} Disconnect a Stripe account (synced data is kept)
- Secret key (
nc_test_…ornc_live_…). Restricted keys need write access. - AI apps (OAuth): not available.
PATH PARAMETERS
RETURNS
-
200revoked — the Stripe connection object
ERRORS
-
404not_found connection of another account
DELETE/v1/stripe_connections/{id}
curl https://api.nochurn.sh/v1/stripe_connections/scn_7U2ckwVunr6xCYko \
-X DELETE \
-H "Authorization: Bearer nc_test_…"const res = await fetch("https://api.nochurn.sh/v1/stripe_connections/scn_7U2ckwVunr6xCYko", {
method: "DELETE",
headers: {
Authorization: "Bearer nc_test_…",
},
});
const stripeConnection = await res.json();import requests
res = requests.delete(
"https://api.nochurn.sh/v1/stripe_connections/scn_7U2ckwVunr6xCYko",
headers={
"Authorization": "Bearer nc_test_…",
},
)
stripe_connection = res.json()require "net/http"
require "json"
uri = URI("https://api.nochurn.sh/v1/stripe_connections/scn_7U2ckwVunr6xCYko")
req = Net::HTTP::Delete.new(uri)
req["Authorization"] = "Bearer nc_test_…"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
stripe_connection = JSON.parse(res.body) RESPONSE 200
{
"object": "stripe_connection",
"id": "scn_7U2ckwVunr6xCYko",
"stripe_account_id": "acct_A",
"livemode": false,
"status": "revoked",
"smart_retries_mode": "stripe",
"internal_id": {
"field": null,
"defaults": ["metadata.user_id"],
"fields": ["metadata.<name>"]
},
"backfill": {
"status": "done",
"progress": {
"customers": 3
},
"error": null,
"started_at": null,
"finished_at": null
},
"history": {
"status": "pending",
"since": null,
"progress": {},
"error": null,
"started_at": null,
"finished_at": null
},
"last_webhook_at": null,
"last_webhook_type": null,
"disconnected_at": "2026-11-04T10:00:00.000Z",
"created_at": "2026-11-04T10:00:00.000Z"
} List connected Stripe accounts (current mode)
- Secret key (
nc_test_…ornc_live_…). Restricted keys need read access. - AI apps (OAuth):
readscope.
QUERY PARAMETERS
- starting_after string
RETURNS
-
200connections, tokens never included — a list of Stripe connection object (StripeConnectionList)
GET/v1/stripe_connections
curl https://api.nochurn.sh/v1/stripe_connections \
-H "Authorization: Bearer nc_test_…"const res = await fetch("https://api.nochurn.sh/v1/stripe_connections", {
headers: {
Authorization: "Bearer nc_test_…",
},
});
const page = await res.json();import requests
res = requests.get(
"https://api.nochurn.sh/v1/stripe_connections",
headers={
"Authorization": "Bearer nc_test_…",
},
)
page = res.json()require "net/http"
require "json"
uri = URI("https://api.nochurn.sh/v1/stripe_connections")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer nc_test_…"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
page = JSON.parse(res.body) RESPONSE 200
{
"object": "list",
"data": [
{
"object": "stripe_connection",
"id": "scn_3oj4t6Cs5RBTByvp",
"stripe_account_id": "acct_A",
"livemode": false,
"status": "active",
"smart_retries_mode": "stripe",
"internal_id": {
"field": null,
"defaults": ["metadata.user_id"],
"fields": ["metadata.<name>"]
},
"backfill": {
"status": "done",
"progress": {
"customers": 3
},
"error": null,
"started_at": null,
"finished_at": null
},
"history": {
"status": "pending",
"since": null,
"progress": {},
"error": null,
"started_at": null,
"finished_at": null
},
"last_webhook_at": "2026-11-04T09:58:00.000Z",
"last_webhook_type": "invoice.payment_failed",
"disconnected_at": null,
"created_at": "2026-11-04T10:00:00.000Z"
}
],
"has_more": false,
"next_cursor": null
} Get the Stripe Connect URL to open in the browser
- Secret key (
nc_test_…ornc_live_…). Restricted keys need write access. - AI apps (OAuth):
configurescope, test mode only.
RETURNS
-
200Stripe Connect OAuth URL, with a signed state — a StripeAuthorizeUrl
ERRORS
-
503stripe_not_configured Stripe not configured on this server
POST/v1/stripe_connections/authorize
curl https://api.nochurn.sh/v1/stripe_connections/authorize \
-X POST \
-H "Authorization: Bearer nc_test_…"const res = await fetch("https://api.nochurn.sh/v1/stripe_connections/authorize", {
method: "POST",
headers: {
Authorization: "Bearer nc_test_…",
},
});
const stripeAuthorizeUrl = await res.json();import requests
res = requests.post(
"https://api.nochurn.sh/v1/stripe_connections/authorize",
headers={
"Authorization": "Bearer nc_test_…",
},
)
stripe_authorize_url = res.json()require "net/http"
require "json"
uri = URI("https://api.nochurn.sh/v1/stripe_connections/authorize")
req = Net::HTTP::Post.new(uri)
req["Authorization"] = "Bearer nc_test_…"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
stripe_authorize_url = JSON.parse(res.body) RESPONSE 200
{
"object": "stripe_authorize_url",
"url": "https://connect.stripe.com/oauth/authorize?client_id=ca_test_dummy&response_type=code&scope=read_write&state=eyJfcmFpbHMiOnsiZGF0YSI6eyJhY2NvdW50X2lkIjoiYWNjX1JpVWpWOUFqNTNYeTh3djQiLCJ1c2VyX2lkIjpudWxsLCJsaXZlbW9kZSI6ZmFsc2UsIm5vbmNlIjoiOGQzZDI1YzA4NDEzNThiNyJ9LCJleHAiOiIyMDI2LTExLTA0VDEwOjMwOjAwLjAwMFoiLCJwdXIiOiJzdHJpcGVfY29ubmVjdCJ9fQ%3D%3D--6ed54c807385687846013962ddefc306141e6dc2",
"livemode": false
} Re-run the Stripe import (idempotent)
- Secret key (
nc_test_…ornc_live_…). Restricted keys need write access. - AI apps (OAuth): not available.
PATH PARAMETERS
RETURNS
-
202import queued — the Stripe connection object
ERRORS
-
409conflict already running
POST/v1/stripe_connections/{id}/backfill
curl https://api.nochurn.sh/v1/stripe_connections/scn_3oj4t6Cs5RBTByvp/backfill \
-X POST \
-H "Authorization: Bearer nc_test_…"const res = await fetch("https://api.nochurn.sh/v1/stripe_connections/scn_3oj4t6Cs5RBTByvp/backfill", {
method: "POST",
headers: {
Authorization: "Bearer nc_test_…",
},
});
const stripeConnection = await res.json();import requests
res = requests.post(
"https://api.nochurn.sh/v1/stripe_connections/scn_3oj4t6Cs5RBTByvp/backfill",
headers={
"Authorization": "Bearer nc_test_…",
},
)
stripe_connection = res.json()require "net/http"
require "json"
uri = URI("https://api.nochurn.sh/v1/stripe_connections/scn_3oj4t6Cs5RBTByvp/backfill")
req = Net::HTTP::Post.new(uri)
req["Authorization"] = "Bearer nc_test_…"
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
stripe_connection = JSON.parse(res.body) RESPONSE 202
{
"object": "stripe_connection",
"id": "scn_29duu2TEteBrZ5L3",
"stripe_account_id": "acct_A",
"livemode": false,
"status": "active",
"smart_retries_mode": "stripe",
"internal_id": {
"field": null,
"defaults": ["metadata.user_id"],
"fields": ["metadata.<name>"]
},
"backfill": {
"status": "pending",
"progress": {
"customers": 3
},
"error": null,
"started_at": null,
"finished_at": null
},
"history": {
"status": "pending",
"since": null,
"progress": {},
"error": null,
"started_at": null,
"finished_at": null
},
"last_webhook_at": null,
"last_webhook_type": null,
"disconnected_at": null,
"created_at": "2026-11-04T10:00:00.000Z"
}