> For the complete documentation index, see [llms.txt](https://docs.takionapi.tech/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.takionapi.tech/px-mobile/api.md).

# Bypass Solution

## **How the Solution Works**

To bypass PerimeterX mobile protection:

1. **Provide our API with the device and app details.**
2. **Parse the returned headers and use them for requests to the protected application.**

{% hint style="info" %}
For app-specific requests, examples, more informations or plan pricing, please contact us on [Discord](https://takionapi.tech/discord) or [via mail](mailto:sales@takionapi.tech)
{% endhint %}

## **Required Details**

Since PerimeterX is mobile-based, our API requires a JSON input with the `package_name` of the Android app (for example `com.enflick.android.TextNow` for TextNow). Additional optional device information can be supplied for more accurate header generation.

Based on this information, the API returns all necessary headers for the specified app.

### Endpoint <a href="#endpoint" id="endpoint"></a>

The endpoint lives on the px-mobile subdomain:

```
https://px-mobile.takionapi.tech/generate
```

## Generate PX mobile headers

> Produces the \`X-PX-\*\` mobile headers (session id, authorization, vid, uuid, device fingerprint, …) for the given app package. Send them on your app-API request alongside the matching User-Agent.<br>

```json
{"openapi":"3.0.3","info":{"title":"Takion API — PerimeterX (Mobile)","version":"1.0.0"},"servers":[{"url":"https://px-mobile.takionapi.tech"}],"security":[{"ApiKeyQuery":[]},{"ApiKeyHeader":[]}],"components":{"securitySchemes":{"ApiKeyQuery":{"type":"apiKey","in":"query","name":"api_key"},"ApiKeyHeader":{"type":"apiKey","in":"header","name":"x-api-key"}},"schemas":{"GenerateMobileRequest":{"type":"object","required":["package_name","proxy"],"properties":{"package_name":{"type":"string","description":"The Android/iOS app package the PX headers are for."},"proxy":{"type":"string","description":"Proxy in `ip:port` or `ip:port:user:pass` format."},"manufacturer":{"type":"string","description":"Device manufacturer to emulate (optional)."},"android_version":{"type":"string","description":"Android version to emulate (optional)."},"continent":{"type":"string","description":"Continent hint for the emulated device (optional)."},"language":{"type":"string","description":"Device language (optional)."}},"additionalProperties":true},"GenerateMobileResponse":{"type":"object","description":"The PX mobile headers. Send each on your app-API request (header names as shown), with the matching User-Agent.\n","properties":{"user-agent":{"type":"string"}},"additionalProperties":true},"Error":{"type":"object","required":["error"],"description":"Every error is a JSON object with a single `error` string. Auth/quota problems return HTTP 401 and unexpected failures 500; validation and trial/whitelist gates return an `error` field too.\n","properties":{"error":{"type":"string"}}}},"responses":{"Unauthorized":{"description":"Authentication or quota failure — HTTP 401 with an `error` message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"ServerError":{"description":"Unexpected server error (HTTP 500).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/generate":{"post":{"operationId":"generatePxMobileHeaders","summary":"Generate PX mobile headers","description":"Produces the `X-PX-*` mobile headers (session id, authorization, vid, uuid, device fingerprint, …) for the given app package. Send them on your app-API request alongside the matching User-Agent.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateMobileRequest"}}}},"responses":{"200":{"description":"The PX mobile headers. On a bad request the API returns an `error` field instead — check for `error` before reading the headers.\n","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/GenerateMobileResponse"},{"$ref":"#/components/schemas/Error"}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"500":{"$ref":"#/components/responses/ServerError"}}}}}}
```

## Send a session-bound mobile TLS request (optional)

> Sends an HTTP request from Takion bound to the \`session\_id\` from\
> /generate, with a realistic mobile TLS fingerprint.\
> \
> \*\*(Important) This endpoint is optional.\*\* If your own client already\
> reproduces the mobile TLS + header fingerprint, just attach the generated\
> \`X-PX-\*\` headers to your own request and skip \`/mobile/tls\`. Use it only\
> when you can't match the fingerprint yourself.<br>

```json
{"openapi":"3.0.3","info":{"title":"Takion API — PerimeterX (Mobile)","version":"1.0.0"},"servers":[{"url":"https://px-mobile.takionapi.tech"}],"security":[{"ApiKeyQuery":[]},{"ApiKeyHeader":[]}],"components":{"securitySchemes":{"ApiKeyQuery":{"type":"apiKey","in":"query","name":"api_key"},"ApiKeyHeader":{"type":"apiKey","in":"header","name":"x-api-key"}},"schemas":{"TlsRequest":{"type":"object","required":["proxy","method","url"],"properties":{"proxy":{"type":"string"},"session_id":{"type":"string","nullable":true,"description":"The x-px-session-id from /generate."},"method":{"type":"string","enum":["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"]},"url":{"type":"string","format":"uri"},"headers":{"type":"object","nullable":true,"additionalProperties":{"type":"string"}},"json":{"type":"object","nullable":true,"additionalProperties":true},"data":{"type":"string","nullable":true}},"additionalProperties":true},"TlsResponse":{"type":"object","properties":{"status_code":{"type":"integer"},"body":{"type":"string"},"headers":{"type":"object","additionalProperties":{"type":"string"}}},"additionalProperties":true},"Error":{"type":"object","required":["error"],"description":"Every error is a JSON object with a single `error` string. Auth/quota problems return HTTP 401 and unexpected failures 500; validation and trial/whitelist gates return an `error` field too.\n","properties":{"error":{"type":"string"}}}},"responses":{"Unauthorized":{"description":"Authentication or quota failure — HTTP 401 with an `error` message.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"ServerError":{"description":"Unexpected server error (HTTP 500).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/mobile/tls":{"post":{"operationId":"pxMobileTlsRequest","summary":"Send a session-bound mobile TLS request (optional)","description":"Sends an HTTP request from Takion bound to the `session_id` from\n/generate, with a realistic mobile TLS fingerprint.\n\n**(Important) This endpoint is optional.** If your own client already\nreproduces the mobile TLS + header fingerprint, just attach the generated\n`X-PX-*` headers to your own request and skip `/mobile/tls`. Use it only\nwhen you can't match the fingerprint yourself.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TlsRequest"}}}},"responses":{"200":{"description":"The upstream response (or an `error` field).","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/TlsResponse"},{"$ref":"#/components/schemas/Error"}]}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"500":{"$ref":"#/components/responses/ServerError"}}}}}}
```
