---
updatedAt: 2026-02-19T23:34:29.000Z
agentTools:
  projectIndex: https://docs.skipify.com/llms.txt
---

# Authorizing outside of Skipify - Network Token or PAN Retrieval

Learn how to retrieve tokens to submit authorizations yourself

> 🚧 Requires approval for merchantAccount configuration
>
> Reach out to your implementation engineer to ensure your use case is approved. Once approved, your merchantAccount will be configured to return network tokens and/or PAN

While the [default payment submission](https://docs.skipify.com/docs/skipify-embedded-components#payment-submission) flow is for Skipify to authorize on behalf of the merchant, Skipify provides the ability for merchants to submit authorizations themselves to offer true psp agnostic support.

## Retrieve tokens or PAN to authorize outside of Skipify

At this point in the flow, the shopper has selected a payment method, and finalized checkout on your UI.

1. Call the `POST /payment/credentials` API to request payment credentials using the `sessionId` and the shopper's selected payment method `paymentId`

* Stage: POST <https://services.staging.skipify.com/payments/credentials>
* Production: POST <https://services.skipify.com/payments/credentials>

HTTP 200 OK response status will be returned as a successful acknowledgement in the POST /payment/credentials response. The actual payment credentials will be sent asynchronously via webhook `"eventName": "PAYMENT_CREDENTIALS"`to the URL configured on your merchant account.

```json /payments/credentials request
POST /payments/credentials
{
  "paymentId": "73c335b2-0dad-4e4a-b10b-950614f80953",
  "sessionId": "ae5686ad-bcc0-425a-bc84-7e9a142b61d3",
  "amount": 5000,
  "merchantReference": "NjghZplGtIx3ap9ziC",
  "currency": "USD"
}
```
```json /credentials response 200
{
    "code": 200,
    "message": "OK"
}
```
```json /credentials response 401
{
  "errorCode": "SPECIFIC_ERROR_CODE",
  "errorMessage": "Something went wrong, here is what happened."
}
```
```json CREDENTIALS Webhook response
{
  "eventName": "PAYMENT_CREDENTIALS",
  "paymentId": "cfbea8f7-123b-42e8-b4f2-87eb53f1f083",
  "merchantId": "b6ef8901-ab29-4128-9739-96844b0b4eff",
  "merchantReference": "INVOICE9876202600130",
  "cardDetails": {
    "networkType": "discover"
  },
  "billingAddress": {
    "firstName": "Test",
    "lastName": "Person",
    "address1": "100 Martinique Ave",
    "city": "Tampa",
    "state": "FL",
    "country": "US",
    "zipCode": "33606",
    "phoneNumber": "3033354234"
  },
  "credentials": [
    {
      "type": "NETWORK_TOKEN",
      "token": "6500093241156634",
      "cvv": "123",
      "expirationMonth": "07",
      "expirationYear": "2028"
    },
    {
      "type": "PAN",
      "pan": "6011123456711111",
      "expirationMonth": "07",
      "expirationYear": "2028"
    }
  ]
}
```

### Request Body Parameters

`POST /payment/credentials`

| Parameter Name    | Required? | Type    | Description                                                                   |
| :---------------- | :-------- | :------ | :---------------------------------------------------------------------------- |
| paymentId         | yes       | string  | This is the paymentId received from the shopper's payment carousel selection. |
| amount            | yes       | integer | The total amount for this purchase in cents (USD).                            |
| sessionId         | yes       | string  | This is the sessionId received from the shopper's payment carousel session.   |
| merchantReference | yes       | string  | This is your unique merchant identifier/invoice number for this transaction.  |
| currency          | yes       | string  | USD is supported today.                                                       |

2. Next, you need to submit the PSP Authorization Response to Skipify to complete the process

* Stage: POST <https://services.staging.skipify.com/payments/externalresponse>
* Production: POST <https://services.skipify.com/payments/externalresponse>

```json /payments/externalresponse request
POST /payments/externalresponse
{
  "paymentId": "73c335b2-0dad-4e4a-b10b-950614f80953",
  "pspRawResponse": "string",
  "amount": 5000,
  "pspHostName": "Stripe",
  "currency": "USD",
  "isRecurring": true
}
```
```json /externalresponse response 200
{
    "code": 200,
    "message": "OK"
}
```
```json /externalresponse response 401
{
  "errorCode": "SPECIFIC_ERROR_CODE",
  "errorMessage": "Something went wrong, here is what happened."
}
```

### Request Body Parameters

`POST /payment/externalresponse`

| Parameter Name | Required? | Type    | Description                                                                                        |
| :------------- | :-------- | :------ | :------------------------------------------------------------------------------------------------- |
| paymentId      | yes       | string  | This is the paymentId received from the shopper's payment carousel selection.                      |
| pspRawResponse | yes       | string  | This is the full unformatted response you received from your PSP when submitting the Authorization |
| amount         | yes       | integer | The total amount for this purchase in cents (USD).                                                 |
| pspHostName    | yes       | string  | This is the name of your PSP - i.e. - Stripe                                                       |
| currency       | yes       | string  | Flag to indicate whether this payment request is for recurring payment                             |
| isRecurring    | yes       | boolean | Flag to indicate whether this payment request was for a recurring payment (CardOnFile)             |