Endpoint where an oauth provider would redirect after a successful user authorizing the oauth application.
POST
/
sdk
/
{environmentId}
/
providers
/
apple
/
redirect
Handle Apple ID OAuth redirect
curl --request POST \
--url https://app.dynamicauth.com/api/v0/sdk/{environmentId}/providers/apple/redirect \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data code=4/0AVHEtk436ug4uWwZN9i2PDpxGTVnLr63IqTNFzTInHce1q2JHQyOCJut9IK2SCZh4JaoSA \
--data state=aB3cD9fG0hJkLmN0pQrStUvWxYz_12- \
--data 'id_token=<string>' \
--data error=access_deniedimport requests
url = "https://app.dynamicauth.com/api/v0/sdk/{environmentId}/providers/apple/redirect"
payload = {
"code": "4/0AVHEtk436ug4uWwZN9i2PDpxGTVnLr63IqTNFzTInHce1q2JHQyOCJut9IK2SCZh4JaoSA",
"state": "aB3cD9fG0hJkLmN0pQrStUvWxYz_12-",
"id_token": "<string>",
"error": "access_denied"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/x-www-form-urlencoded"
}
response = requests.post(url, data=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: 'Bearer <token>',
'Content-Type': 'application/x-www-form-urlencoded'
},
body: new URLSearchParams({
code: '4/0AVHEtk436ug4uWwZN9i2PDpxGTVnLr63IqTNFzTInHce1q2JHQyOCJut9IK2SCZh4JaoSA',
state: 'aB3cD9fG0hJkLmN0pQrStUvWxYz_12-',
id_token: '<string>',
error: 'access_denied'
})
};
fetch('https://app.dynamicauth.com/api/v0/sdk/{environmentId}/providers/apple/redirect', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.dynamicauth.com/api/v0/sdk/{environmentId}/providers/apple/redirect",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "code=4%2F0AVHEtk436ug4uWwZN9i2PDpxGTVnLr63IqTNFzTInHce1q2JHQyOCJut9IK2SCZh4JaoSA&state=aB3cD9fG0hJkLmN0pQrStUvWxYz_12-&id_token=%3Cstring%3E&error=access_denied",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/x-www-form-urlencoded"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.dynamicauth.com/api/v0/sdk/{environmentId}/providers/apple/redirect"
payload := strings.NewReader("code=4%2F0AVHEtk436ug4uWwZN9i2PDpxGTVnLr63IqTNFzTInHce1q2JHQyOCJut9IK2SCZh4JaoSA&state=aB3cD9fG0hJkLmN0pQrStUvWxYz_12-&id_token=%3Cstring%3E&error=access_denied")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.dynamicauth.com/api/v0/sdk/{environmentId}/providers/apple/redirect")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/x-www-form-urlencoded")
.body("code=4%2F0AVHEtk436ug4uWwZN9i2PDpxGTVnLr63IqTNFzTInHce1q2JHQyOCJut9IK2SCZh4JaoSA&state=aB3cD9fG0hJkLmN0pQrStUvWxYz_12-&id_token=%3Cstring%3E&error=access_denied")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.dynamicauth.com/api/v0/sdk/{environmentId}/providers/apple/redirect")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/x-www-form-urlencoded'
request.body = "code=4%2F0AVHEtk436ug4uWwZN9i2PDpxGTVnLr63IqTNFzTInHce1q2JHQyOCJut9IK2SCZh4JaoSA&state=aB3cD9fG0hJkLmN0pQrStUvWxYz_12-&id_token=%3Cstring%3E&error=access_denied"
response = http.request(request)
puts response.read_body"<string>"{
"error": "<string>"
}{
"error": "Resources already exists for this Object",
"payload": {
"email": "joe@email.com",
"embeddedWalletName": "<string>",
"mergeConflicts": {
"fromUser": {
"id": "95b11417-f18f-457f-8804-68e361f9164f",
"projectEnvironmentId": "95b11417-f18f-457f-8804-68e361f9164f",
"verifiedCredentials": [
{
"id": "95b11417-f18f-457f-8804-68e361f9164f",
"signInEnabled": true,
"address": "0xbF394748301603f18d953C90F0b087CBEC0E1834",
"chain": "<string>",
"refId": "95b11417-f18f-457f-8804-68e361f9164f",
"signerRefId": "95b11417-f18f-457f-8804-68e361f9164f",
"email": "jsmith@example.com",
"name_service": {
"avatar": "<string>",
"name": "<string>"
},
"public_identifier": "<string>",
"wallet_name": "<string>",
"wallet_properties": {
"turnkeySubOrganizationId": "95b11417-f18f-457f-8804-68e361f9164f",
"turnkeyPrivateKeyId": "95b11417-f18f-457f-8804-68e361f9164f",
"turnkeyHDWalletId": "95b11417-f18f-457f-8804-68e361f9164f",
"isAuthenticatorAttached": true,
"turnkeyUserId": "95b11417-f18f-457f-8804-68e361f9164f",
"isSessionKeyCompatible": true
},
"business_account_properties": {
"businessAccountId": "95b11417-f18f-457f-8804-68e361f9164f",
"businessAccountCreatedAt": "2023-11-07T05:31:56Z",
"businessAccountSignerId": "95b11417-f18f-457f-8804-68e361f9164f",
"businessAccountName": "<string>",
"businessAccountExternalRef": "<string>"
},
"oauth_username": "<string>",
"oauth_display_name": "<string>",
"oauth_account_id": "<string>",
"phoneNumber": "9171113333",
"phoneCountryCode": "1",
"isoCountryCode": "US",
"oauth_account_photos": [
"<string>"
],
"oauth_emails": [
"<string>"
],
"oauth_metadata": {},
"previous_users": [
"95b11417-f18f-457f-8804-68e361f9164f"
],
"embedded_wallet_id": "<string>",
"wallet_additional_addresses": [
{
"address": "<string>",
"publicKey": "<string>",
"network": "<string>"
}
],
"lastSelectedAt": "2023-11-07T05:31:56Z",
"verifiedAt": "2023-11-07T05:31:56Z"
}
],
"lastVerifiedCredentialId": "95b11417-f18f-457f-8804-68e361f9164f",
"sessionId": "95b11417-f18f-457f-8804-68e361f9164f",
"alias": "An example name",
"country": "US",
"email": "jsmith@example.com",
"firstName": "An example name",
"jobTitle": "An example name",
"lastName": "An example name",
"phoneNumber": "<string>",
"policiesConsent": true,
"tShirtSize": "An example name",
"team": "An example name",
"username": "An example name",
"firstVisit": "2023-11-07T05:31:56Z",
"lastVisit": "2023-11-07T05:31:56Z",
"newUser": true,
"metadata": {},
"btcWallet": "<string>",
"kdaWallet": "<string>",
"ltcWallet": "<string>",
"ckbWallet": "<string>",
"kasWallet": "<string>",
"dogeWallet": "<string>",
"emailNotification": true,
"discordNotification": true,
"newsletterNotification": true,
"lists": [
"<string>"
],
"scope": "superuser marketing operations",
"missingFields": [
{
"name": "<string>",
"required": true,
"enabled": true,
"unique": true,
"verify": true,
"validationRules": {
"unique": true,
"regex": "^0x",
"validOptions": [
{
"label": "small"
},
{
"label": "medium"
},
{
"label": "large"
}
],
"checkboxText": "Agree to the terms and conditions"
},
"label": "<string>",
"position": 123
}
]
},
"conflicts": [
{
"field": {
"name": "<string>",
"required": true,
"enabled": true,
"unique": true,
"verify": true,
"validationRules": {
"unique": true,
"regex": "^0x",
"validOptions": [
{
"label": "small"
},
{
"label": "medium"
},
{
"label": "large"
}
],
"checkboxText": "Agree to the terms and conditions"
},
"label": "<string>",
"position": 123
},
"fromUser": {
"userId": "95b11417-f18f-457f-8804-68e361f9164f",
"value": "An example name"
},
"currentUser": {
"userId": "95b11417-f18f-457f-8804-68e361f9164f",
"value": "An example name"
}
}
]
},
"additionalMessages": [
"<string>"
]
}
}{
"error": "Internal Server Error"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
ID of the environment
Required string length:
36Pattern:
^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$Example:
"95b11417-f18f-457f-8804-68e361f9164f"
Body
application/x-www-form-urlencoded
Apple ID required stuff
Valid oauth code
Pattern:
^[a-zA-Z0-9_\.\-\/\\%*!+=$]{5,4096}$Example:
"4/0AVHEtk436ug4uWwZN9i2PDpxGTVnLr63IqTNFzTInHce1q2JHQyOCJut9IK2SCZh4JaoSA"
Temporary auth state generated by the SDK; native mobile apps may append _client-redirect:
Maximum string length:
1200Pattern:
^[A-Za-z0-9_-]{1,64}(_client-redirect:[A-Za-z0-9_:/?&=%.@#!$'()*+,;~\[\]-]{0,1024})?$Example:
"aB3cD9fG0hJkLmN0pQrStUvWxYz_12-"
Pattern:
^([a-zA-Z0-9_-]+)\.([a-zA-Z0-9_-]+)\.([a-zA-Z0-9_-]+)$Valid oauth error
Pattern:
^[a-zA-Z_\-]{5,100}$Example:
"access_denied"
Response
Success
The response is of type string.
Last modified on July 24, 2026
Was this page helpful?
Previous
Get OAuth provider authorization HTMLEndpoint where an oauth provider would return authorization HTML used for mobile-friendly login, such as Apple ID with Touch ID on enabled devices.
Next
⌘I
Handle Apple ID OAuth redirect
curl --request POST \
--url https://app.dynamicauth.com/api/v0/sdk/{environmentId}/providers/apple/redirect \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data code=4/0AVHEtk436ug4uWwZN9i2PDpxGTVnLr63IqTNFzTInHce1q2JHQyOCJut9IK2SCZh4JaoSA \
--data state=aB3cD9fG0hJkLmN0pQrStUvWxYz_12- \
--data 'id_token=<string>' \
--data error=access_deniedimport requests
url = "https://app.dynamicauth.com/api/v0/sdk/{environmentId}/providers/apple/redirect"
payload = {
"code": "4/0AVHEtk436ug4uWwZN9i2PDpxGTVnLr63IqTNFzTInHce1q2JHQyOCJut9IK2SCZh4JaoSA",
"state": "aB3cD9fG0hJkLmN0pQrStUvWxYz_12-",
"id_token": "<string>",
"error": "access_denied"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/x-www-form-urlencoded"
}
response = requests.post(url, data=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: 'Bearer <token>',
'Content-Type': 'application/x-www-form-urlencoded'
},
body: new URLSearchParams({
code: '4/0AVHEtk436ug4uWwZN9i2PDpxGTVnLr63IqTNFzTInHce1q2JHQyOCJut9IK2SCZh4JaoSA',
state: 'aB3cD9fG0hJkLmN0pQrStUvWxYz_12-',
id_token: '<string>',
error: 'access_denied'
})
};
fetch('https://app.dynamicauth.com/api/v0/sdk/{environmentId}/providers/apple/redirect', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.dynamicauth.com/api/v0/sdk/{environmentId}/providers/apple/redirect",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "code=4%2F0AVHEtk436ug4uWwZN9i2PDpxGTVnLr63IqTNFzTInHce1q2JHQyOCJut9IK2SCZh4JaoSA&state=aB3cD9fG0hJkLmN0pQrStUvWxYz_12-&id_token=%3Cstring%3E&error=access_denied",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/x-www-form-urlencoded"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.dynamicauth.com/api/v0/sdk/{environmentId}/providers/apple/redirect"
payload := strings.NewReader("code=4%2F0AVHEtk436ug4uWwZN9i2PDpxGTVnLr63IqTNFzTInHce1q2JHQyOCJut9IK2SCZh4JaoSA&state=aB3cD9fG0hJkLmN0pQrStUvWxYz_12-&id_token=%3Cstring%3E&error=access_denied")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.dynamicauth.com/api/v0/sdk/{environmentId}/providers/apple/redirect")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/x-www-form-urlencoded")
.body("code=4%2F0AVHEtk436ug4uWwZN9i2PDpxGTVnLr63IqTNFzTInHce1q2JHQyOCJut9IK2SCZh4JaoSA&state=aB3cD9fG0hJkLmN0pQrStUvWxYz_12-&id_token=%3Cstring%3E&error=access_denied")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.dynamicauth.com/api/v0/sdk/{environmentId}/providers/apple/redirect")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/x-www-form-urlencoded'
request.body = "code=4%2F0AVHEtk436ug4uWwZN9i2PDpxGTVnLr63IqTNFzTInHce1q2JHQyOCJut9IK2SCZh4JaoSA&state=aB3cD9fG0hJkLmN0pQrStUvWxYz_12-&id_token=%3Cstring%3E&error=access_denied"
response = http.request(request)
puts response.read_body"<string>"{
"error": "<string>"
}{
"error": "Resources already exists for this Object",
"payload": {
"email": "joe@email.com",
"embeddedWalletName": "<string>",
"mergeConflicts": {
"fromUser": {
"id": "95b11417-f18f-457f-8804-68e361f9164f",
"projectEnvironmentId": "95b11417-f18f-457f-8804-68e361f9164f",
"verifiedCredentials": [
{
"id": "95b11417-f18f-457f-8804-68e361f9164f",
"signInEnabled": true,
"address": "0xbF394748301603f18d953C90F0b087CBEC0E1834",
"chain": "<string>",
"refId": "95b11417-f18f-457f-8804-68e361f9164f",
"signerRefId": "95b11417-f18f-457f-8804-68e361f9164f",
"email": "jsmith@example.com",
"name_service": {
"avatar": "<string>",
"name": "<string>"
},
"public_identifier": "<string>",
"wallet_name": "<string>",
"wallet_properties": {
"turnkeySubOrganizationId": "95b11417-f18f-457f-8804-68e361f9164f",
"turnkeyPrivateKeyId": "95b11417-f18f-457f-8804-68e361f9164f",
"turnkeyHDWalletId": "95b11417-f18f-457f-8804-68e361f9164f",
"isAuthenticatorAttached": true,
"turnkeyUserId": "95b11417-f18f-457f-8804-68e361f9164f",
"isSessionKeyCompatible": true
},
"business_account_properties": {
"businessAccountId": "95b11417-f18f-457f-8804-68e361f9164f",
"businessAccountCreatedAt": "2023-11-07T05:31:56Z",
"businessAccountSignerId": "95b11417-f18f-457f-8804-68e361f9164f",
"businessAccountName": "<string>",
"businessAccountExternalRef": "<string>"
},
"oauth_username": "<string>",
"oauth_display_name": "<string>",
"oauth_account_id": "<string>",
"phoneNumber": "9171113333",
"phoneCountryCode": "1",
"isoCountryCode": "US",
"oauth_account_photos": [
"<string>"
],
"oauth_emails": [
"<string>"
],
"oauth_metadata": {},
"previous_users": [
"95b11417-f18f-457f-8804-68e361f9164f"
],
"embedded_wallet_id": "<string>",
"wallet_additional_addresses": [
{
"address": "<string>",
"publicKey": "<string>",
"network": "<string>"
}
],
"lastSelectedAt": "2023-11-07T05:31:56Z",
"verifiedAt": "2023-11-07T05:31:56Z"
}
],
"lastVerifiedCredentialId": "95b11417-f18f-457f-8804-68e361f9164f",
"sessionId": "95b11417-f18f-457f-8804-68e361f9164f",
"alias": "An example name",
"country": "US",
"email": "jsmith@example.com",
"firstName": "An example name",
"jobTitle": "An example name",
"lastName": "An example name",
"phoneNumber": "<string>",
"policiesConsent": true,
"tShirtSize": "An example name",
"team": "An example name",
"username": "An example name",
"firstVisit": "2023-11-07T05:31:56Z",
"lastVisit": "2023-11-07T05:31:56Z",
"newUser": true,
"metadata": {},
"btcWallet": "<string>",
"kdaWallet": "<string>",
"ltcWallet": "<string>",
"ckbWallet": "<string>",
"kasWallet": "<string>",
"dogeWallet": "<string>",
"emailNotification": true,
"discordNotification": true,
"newsletterNotification": true,
"lists": [
"<string>"
],
"scope": "superuser marketing operations",
"missingFields": [
{
"name": "<string>",
"required": true,
"enabled": true,
"unique": true,
"verify": true,
"validationRules": {
"unique": true,
"regex": "^0x",
"validOptions": [
{
"label": "small"
},
{
"label": "medium"
},
{
"label": "large"
}
],
"checkboxText": "Agree to the terms and conditions"
},
"label": "<string>",
"position": 123
}
]
},
"conflicts": [
{
"field": {
"name": "<string>",
"required": true,
"enabled": true,
"unique": true,
"verify": true,
"validationRules": {
"unique": true,
"regex": "^0x",
"validOptions": [
{
"label": "small"
},
{
"label": "medium"
},
{
"label": "large"
}
],
"checkboxText": "Agree to the terms and conditions"
},
"label": "<string>",
"position": 123
},
"fromUser": {
"userId": "95b11417-f18f-457f-8804-68e361f9164f",
"value": "An example name"
},
"currentUser": {
"userId": "95b11417-f18f-457f-8804-68e361f9164f",
"value": "An example name"
}
}
]
},
"additionalMessages": [
"<string>"
]
}
}{
"error": "Internal Server Error"
}