Skip to main content
Use the client_id and key_fingerprint from Admin → Connectors → Custom Source. Sign an RFC 7523 assertion with the matching private key. Copy the fingerprint into the JWT header as kid. Send POST /token with Content-Type: application/x-www-form-urlencoded and these fields:
A successful response includes Cache-Control: no-store:
Access tokens last 60 minutes and cover one datasource. Send Authorization: Bearer <access_token> on every data request. Reuse the token until it expires; create a fresh assertion and jti for each exchange. Token exchange allows one request per second per client id with a five-second burst. Exceeding this returns 429 rate_limited. Wrong form grant or assertion type returns 400 invalid_request. Authentication failures return 401 invalid_client without further detail by design. Wrong key, kid, audience, expiry, replayed jti, unsupported algorithm, and a disabled connector all look the same. Check those inputs and your system clock. A 401 includes WWW-Authenticate: Bearer. On a data-route 401 invalid_token, exchange a new token and continue with the same upload id. Token expiry or key rotation does not discard an upload. After rotation, use the new private key and fingerprint for the exchange.

Create a connector

In Admin → Connectors → Custom Source, enter:
  1. A datasource name matching ^[a-z][a-z0-9_]{2,40}$.
  2. Comma-separated document types. purchase_order and invoice are mapped types; you can also declare your own type names matching ^[a-z][a-z0-9_]{2,40}$, which Pascal stores as sent.
  3. Optionally, an Ed25519 or P-256 public key in SPKI PEM format, starting with -----BEGIN PUBLIC KEY-----.
The Credentials step shows client_id and key_fingerprint. If you leave the public key blank, Pascal generates an Ed25519 pair and shows the PKCS8 PEM private_key once. Pascal never stores that private key. Save it in your job’s secret store before leaving the screen. To generate an Ed25519 key locally:
Paste the contents of custom-source.pub into the connector. Store custom-source.key privately, in your job’s secret store. For P-256, generate the key with this command, then use the same public-key export command above:
Use ES256 to sign P-256 assertions and EdDSA for Ed25519. The fingerprint is base64url(sha256(DER SubjectPublicKeyInfo)) without padding. Copy it from Admin instead of computing it yourself.

Rotate the signing key

Each connector has one active key. To rotate it, update the connector with a new public key, then give your job the new private key and fingerprint. Old tokens return 401 invalid_token; in-flight uploads continue. Pascal cannot show a generated private key again. If you lose one, rotate.