API REFERENCE v1

DATA

Stripe

The Stripe connection object

Stripe Connect: the connection, the import and its settings.

ATTRIBUTES

  • object enum
    • stripe_connection
  • id string
  • livemode boolean
  • status enum
    • active
    • revoked
    • error
  • 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
    • field string | null

      The field this connection names (PATCH internal_id_field); null = defaults.

    • defaults array of strings

      Read in this order when field is null; user_id is the account's external_id_metadata_key.

    • fields array of strings

      The shapes a field may take for this tool (<name> = one key).

  • backfill object
    Show child attributesHide child attributes
    • status enum
      • pending
      • running
      • done
      • failed
    • progress object

      Records imported so far: customers, subscriptions, invoices, payment_methods.

    • error object | null

      Why the import stopped and what to do; null unless it failed.

      Show child attributesHide child attributes
    • started_at string | null date-time
    • finished_at string | null date-time
Show 5 more attributesHide 5 attributes
  • history object

    12-month history import (invoices and payment attempts), after the backfill.

    Show child attributesHide child attributes
    • status enum
      • pending
      • running
      • done
      • failed
    • since string | null date-time
    • progress object

      Records imported so far: invoices, charges.

    • error object | null

      Why the import stopped and what to do; null unless it failed.

      Show child attributesHide child attributes
    • started_at string | null date-time
    • finished_at string | null date-time
  • last_webhook_at string | null date-time
  • last_webhook_type string | null

    Type of the newest Stripe event received for this connection; null before the first.

  • disconnected_at string | null date-time
  • created_at string date-time

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_… or nc_live_…). Restricted keys need write access.
  • AI apps (OAuth): not available.

PATH PARAMETERS

  • id string REQUIRED

BODY PARAMETERS

    • 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

ERRORS

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_… or nc_live_…). Restricted keys need write access.
  • AI apps (OAuth): not available.

PATH PARAMETERS

  • id string REQUIRED

RETURNS

ERRORS

  • 404 not_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_… or nc_live_…). Restricted keys need read access.
  • AI apps (OAuth): read scope.

QUERY PARAMETERS

RETURNS

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_… or nc_live_…). Restricted keys need write access.
  • AI apps (OAuth): configure scope, test mode only.

RETURNS

ERRORS

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_… or nc_live_…). Restricted keys need write access.
  • AI apps (OAuth): not available.

PATH PARAMETERS

  • id string REQUIRED

RETURNS

ERRORS

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