Skip to content

Stripe: Create a Forwarding Request

Stripe forwarding.postForwardingRequests: arguments, response, policy and SDK examples.

← Forwarding operations · Get started

Operation stripe.postforwardingrequests

Provider route: POST /v1/forwarding/requests. Alter supplies the connection’s credentials and routing.

Install @alter-ai/sdk @alter-ai/stripe with npm, or alter-sdk-stripe with pip. Supply your connected customer’s grant ID and the arguments described below.

import { App } from "@alter-ai/sdk";
import { StripeIntegration } from "@alter-ai/stripe";
async function execute(input: Parameters<StripeIntegration["forwarding"]["postForwardingRequests"]>[0]) {
const app = new App({ apiKey: process.env.ALTER_API_KEY! });
try {
const provider = new StripeIntegration(app, { grantId: process.env.PROVIDER_GRANT_ID! });
const call = await provider.forwarding.postForwardingRequests(input);
const result = await call.wait();
return result.bodyJson();
} finally {
await app.close();
}
}
import os
from alter_sdk import App
from alter_sdk_stripe import StripeIntegration
async def execute(arguments):
async with App(api_key=os.environ["ALTER_API_KEY"]) as app:
provider = StripeIntegration(app, {"grant_id": os.environ["PROVIDER_GRANT_ID"]})
call = await provider.forwarding.post_forwarding_requests(arguments)
result = await call.wait()
return result.body_json()
FieldTypePresenceDescription and constraints
$objectRootAdditional keys: not allowed
headersobjectOptionalAdditional keys: not allowed
headers.Idempotency-KeystringOptionalMinimum length: 1
Maximum length: 255
bodyobjectRequired within parentAdditional keys: not allowed
body.expandarrayOptionalSpecifies which fields in the response should be expanded.
body.expand[]stringEach itemMaximum length: 5000
body.metadataobjectOptionalSet of [key-value pairs](https://docs.stripe.com/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`.
Additional keys: see wildcard field
body.metadata.*stringAdditional keys
body.payment_methodstringRequired within parentThe PaymentMethod to insert into the forwarded request. Forwarding previously consumed PaymentMethods is allowed.
Maximum length: 5000
body.replacementsarrayRequired within parentThe field kinds to be replaced in the forwarded request.
body.replacements[]stringEach itemOne of: card_cvc, card_expiry, card_number, cardholder_name, request_signature
body.requestobjectOptionalThe request body and headers to be sent to the destination endpoint.
body.request.bodystringOptionalMaximum length: 5000
body.request.headersarrayOptional
body.request.headers[]objectEach item
body.request.headers[].namestringRequired within parentMaximum length: 5000
body.request.headers[].valuestringRequired within parentMaximum length: 5000
body.urlstringRequired within parentThe destination URL for the forwarded request. Must be supported by the config.
Maximum length: 5000

Response media type: application/json. The table describes the pinned successful response. Referenced models link to their complete fields.

FieldTypePresenceDescription and constraints
$ModelRootExpand Create a Forwarding Request — response body

Referenced models: Create a Forwarding Request — response body

Create a Forwarding Request — response body
FieldTypePresenceDescription and constraints
$objectRootInstructs Stripe to make a request on your behalf using the destination URL. The destination URL
is activated by Stripe at the time of onboarding. Stripe verifies requests with your credentials
provided during onboarding, and injects card details from the payment_method into the request.

Stripe redacts all sensitive fields and headers, including authentication credentials and card numbers,
before storing the request and response data in the forwarding Request object, which are subject to a
30-day retention period.

You can provide a Stripe idempotency key to make sure that requests with the same key result in only one
outbound request. The Stripe idempotency key provided should be unique and different from any idempotency
keys provided on the underlying third-party request.

Forwarding Requests are synchronous requests that return a response or time out according to
Stripe’s limits.

Related guide: [Forward card details to third-party API endpoints](https://docs.stripe.com/payments/forwarding).
createdJSONRequired within parent
created (anyOf 1)integerAlternativeTime at which the object was created. Measured in seconds since the Unix epoch.
Format: unix-time
created (anyOf 2)stringAlternativePattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$
idstringRequired within parentUnique identifier for the object.
Maximum length: 5000
livemodebooleanRequired within parentIf the object exists in live mode, the value is `true`. If the object exists in test mode, the value is `false`.
metadataJSONOptional
metadata (anyOf 1)objectAlternativeSet of [key-value pairs](https://docs.stripe.com/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
Additional keys: see wildcard field
metadata (anyOf 1).*stringAdditional keysMaximum length: 500
metadata (anyOf 2)nullAlternative
objectstringRequired within parentString representing the object's type. Objects of the same type share the same value.
Known values: forwarding.request
payment_methodstringRequired within parentThe PaymentMethod to insert into the forwarded request. Forwarding previously consumed PaymentMethods is allowed.
Maximum length: 5000
replacementsarrayRequired within parentThe field kinds to be replaced in the forwarded request.
replacements[]stringEach itemKnown values: card_cvc, card_expiry, card_number, cardholder_name, request_signature
request_contextJSONOptional
request_context (anyOf 1)JSONAlternativeContext about the request from Stripe's servers to the destination endpoint.
request_context (anyOf 1) (anyOf 1)ModelAlternativeExpand Create a Forwarding Request — response body — request context value Metadata about the forwarded request
request_context (anyOf 2)nullAlternative
request_detailsJSONOptional
request_details (anyOf 1)JSONAlternativeThe request that was sent to the destination endpoint. We redact any sensitive fields.
request_details (anyOf 1) (anyOf 1)ModelAlternativeExpand Create a ForwardingRequest — response body — request_details / value / http_method: POST
request_details (anyOf 2)nullAlternative
response_detailsJSONOptional
response_details (anyOf 1)JSONAlternativeThe response that the destination endpoint returned to us. We redact any sensitive fields.
response_details (anyOf 1) (anyOf 1)ModelAlternativeExpand Create a Forwarding Request — response body — response details value body, headers, status
response_details (anyOf 2)nullAlternative
urlJSONOptional
url (anyOf 1)stringAlternativeThe destination URL for the forwarded request. Must be supported by the config.
Maximum length: 5000
url (anyOf 2)nullAlternative

Referenced models: Create a Forwarding Request — response body — request context value Metadata about the forwarded request, Create a ForwardingRequest — response body — request_details / value / http_method: POST, Create a Forwarding Request — response body — response details value body, headers, status

Create a Forwarding Request — response body — request context value Metadata about the forwarded request
FieldTypePresenceDescription and constraints
$objectRootMetadata about the forwarded request.
destination_durationJSONRequired within parent
destination_duration (anyOf 1)integerAlternativeThe time it took in milliseconds for the destination endpoint to respond.
destination_duration (anyOf 2)stringAlternativePattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$
destination_ip_addressstringRequired within parentThe IP address of the destination.
Maximum length: 5000
Create a ForwardingRequest — response body — request_details / value / http_method: POST
FieldTypePresenceDescription and constraints
$objectRootDetails about the request forwarded to the destination endpoint.
bodystringRequired within parentThe body payload to send to the destination endpoint.
Maximum length: 5000
headersarrayRequired within parentThe headers to include in the forwarded request. Can be omitted if no additional headers (excluding Stripe-generated ones such as the Content-Type header) should be included.
headers[]ModelEach itemExpand Create a ForwardingRequest — response body — request_details / value / http_method: POST headers item
http_methodstringRequired within parentThe HTTP method used to call the destination endpoint.
Known values: POST

Referenced models: Create a ForwardingRequest — response body — request_details / value / http_method: POST headers item

Create a Forwarding Request — response body — response details value body, headers, status
FieldTypePresenceDescription and constraints
$objectRootDetails about the response from the destination endpoint.
bodystringRequired within parentThe response body from the destination endpoint to Stripe.
Maximum length: 5000
headersarrayRequired within parentHTTP headers that the destination endpoint returned.
headers[]ModelEach itemExpand Create a ForwardingRequest — response body — request_details / value / http_method: POST headers item
statusJSONRequired within parent
status (anyOf 1)integerAlternativeThe HTTP status code that the destination endpoint returned.
status (anyOf 2)stringAlternativePattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$

Referenced models: Create a ForwardingRequest — response body — request_details / value / http_method: POST headers item

Create a ForwardingRequest — response body — request_details / value / http_method: POST headers item
FieldTypePresenceDescription and constraints
$objectRootHeader data.
namestringRequired within parentThe header name.
Maximum length: 5000
valuestringRequired within parentThe header value.
Maximum length: 5000

SDK function policy ID: stripe.postforwardingrequests. Catalog operation: PostForwardingRequests. Rules can name either ID; function rules distinguish managed calls and conservatively cover raw calls sharing the route. Existing grant permissions and policy rules apply. wait() returns an immediate result or waits for a required approval; it never approves the request itself. Persist the approval ID to resume after a restart.

Provider errors retain their response; JSON decoding raises ProviderAPIError for provider failures. ManagedOperationError identifies contract/input/retention errors. See error handling and provider-specific behavior. Sensitive input may be refused before approval storage. A decoding error never resubmits a write.

Pinned headers: {"Stripe-Version": "2026-09-30.endive"}

Official provider source

Report an issue with this page

Necessary

Required for sign-in, security, authorization, and remembering your choices.

Always active

Analytics

Helps us understand which product and documentation features are useful.

Performance diagnostics

Uses performance tracing and privacy-masked session replay to diagnose problems.

You can change these choices at any time from Cookie settings.