Generate JWK
Endpoint
POST /apiops/projects/{projectName}/jwks/generate
Authentication
Requires a Personal API Access Token.
Header
Authorization: Bearer YOUR_TOKEN
Request
Headers
| Header | Value | Required |
|---|---|---|
| Authorization | Bearer {token} | Yes |
| Content-Type | application/json | Yes |
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| projectName | string | Yes | Project name |
Request Body
The request body structure varies based on the JWK type. All types require name and type fields.
Type: RSA
{
"name": "generated-rsa-jwk",
"description": "Auto-generated RSA JWK",
"type": "RSA",
"rsa": {
"keySize": 2048,
"keyUseType": "SIGNATURE",
"algorithm": "RSA256",
"keyIdType": "TIMESTAMP",
"notBeforeTime": "2024-01-01T00:00:00Z",
"expirationTime": "2025-01-01T00:00:00Z"
}
}
RSA Parameters:
keySize(integer): Key size in bits. Common values:2048,3072,40962048: Standard size, good balance of security and performance3072: Higher security, recommended for long-term use4096: Maximum security, slower operations
keyUseType(string, optional): Key usage type. Valid values:SIGNATURE,ENCRYPTIONSIGNATURE: Key is used for signing (default)ENCRYPTION: Key is used for encryption
algorithm(string, optional): Algorithm to use with this key. Valid values:- For SIGNATURE:
RSA256,RSA384,RSA512,PS256,PS384,PS512 - For ENCRYPTION:
RSA1_5(deprecated),RSA_OAEP(deprecated),RSA_OAEP_256,RSA_OAEP_384,RSA_OAEP_512
- For SIGNATURE:
keyIdType(string, optional): Method to generate the key ID (kid). Valid values:TIMESTAMP(default),SHA256,SHA1,ISO_DATE,NONEnotBeforeTime(string, optional): ISO 8601 date/time when the key becomes valid. If not provided, current time is usedexpirationTime(string, optional): ISO 8601 date/time when the key expires. If not provided, one year fromnotBeforeTimeis used
Type: EC (Elliptic Curve)
{
"name": "generated-ec-jwk",
"description": "Auto-generated EC JWK",
"type": "EC",
"ec": {
"curveType": "P256",
"keyUseType": "SIGNATURE",
"algorithm": "ES256",
"keyIdType": "TIMESTAMP",
"notBeforeTime": "2024-01-01T00:00:00Z",
"expirationTime": "2025-01-01T00:00:00Z"
}
}
EC Parameters:
curveType(string): Curve name. Valid values:P256,P384,P521,SECP256K1P256: 256-bit curve (NIST P-256, secp256r1)P384: 384-bit curve (NIST P-384, secp384r1)P521: 521-bit curve (NIST P-521, secp521r1)SECP256K1: secp256k1 curve (used in Bitcoin)
keyUseType(string, optional): Key usage type. Valid values:SIGNATURE,ENCRYPTIONSIGNATURE: Key is used for signing (default)ENCRYPTION: Key is used for encryption
algorithm(string, optional): Algorithm to use with this key. Valid values:- For SIGNATURE:
ES256,ES384,ES512,ES256K - For ENCRYPTION:
ECDH_ES,ECDH_ES_A128KW,ECDH_ES_A192KW,ECDH_ES_A256KW,ECDH_1PU,ECDH_1PU_A128KW,ECDH_1PU_A192KW,ECDH_1PU_A256KW
- For SIGNATURE:
keyIdType(string, optional): Method to generate the key ID (kid). Valid values:TIMESTAMP(default),SHA256,SHA1,ISO_DATE,NONEnotBeforeTime(string, optional): ISO 8601 date/time when the key becomes valid. If not provided, current time is usedexpirationTime(string, optional): ISO 8601 date/time when the key expires. If not provided, one year fromnotBeforeTimeis used
Type: OCT (Octet Sequence - Symmetric Key)
{
"name": "generated-oct-jwk",
"description": "Auto-generated symmetric key",
"type": "OCT",
"oct": {
"keySize": 256,
"keyUseType": "SIGNATURE",
"algorithm": "HS256",
"keyIdType": "TIMESTAMP",
"passwordSaltLength": 8,
"passwordIterationCount": 1000,
"notBeforeTime": "2024-01-01T00:00:00Z",
"expirationTime": "2025-01-01T00:00:00Z"
}
}
OCT Parameters:
keySize(integer): Key size in bits. Common values:128,192,256128: 128-bit key (16 bytes)192: 192-bit key (24 bytes)256: 256-bit key (32 bytes) - Recommended
keyUseType(string, optional): Key usage type. Valid values:SIGNATURE,ENCRYPTIONSIGNATURE: Key is used for signing (default)ENCRYPTION: Key is used for encryption
algorithm(string, optional): Algorithm to use with this key. Valid values:- For SIGNATURE:
HS256,HS384,HS512 - For ENCRYPTION:
A128KW,A192KW,A256KW,A128GCMKW,A192GCMKW,A256GCMKW,DIR,PBES2_HS256_A128KW,PBES2_HS384_A192KW,PBES2_HS512_A256KW
- For SIGNATURE:
keyIdType(string, optional): Method to generate the key ID (kid). Valid values:TIMESTAMP(default),SHA256,SHA1,ISO_DATE,NONEpasswordSaltLength(integer, optional): Salt length for password-based encryption. Default:8passwordIterationCount(integer, optional): Iteration count for password-based encryption. Default:1000notBeforeTime(string, optional): ISO 8601 date/time when the key becomes valid. If not provided, current time is usedexpirationTime(string, optional): ISO 8601 date/time when the key expires. If not provided, one year fromnotBeforeTimeis used
Type: OKP (Octet Key Pair)
{
"name": "generated-okp-jwk",
"description": "Auto-generated OKP JWK",
"type": "OKP",
"okp": {
"curveType": "ED25519",
"keyUseType": "SIGNATURE",
"algorithm": "EdDSA",
"keyIdType": "TIMESTAMP",
"notBeforeTime": "2024-01-01T00:00:00Z",
"expirationTime": "2025-01-01T00:00:00Z"
}
}
OKP Parameters:
curveType(string): Curve name. Valid values:ED25519,X25519ED25519: Edwards Curve for signing (Ed25519)X25519: Montgomery Curve for key exchange (X25519)- Note:
Ed448andX448are currently unsupported
keyUseType(string, optional): Key usage type. Valid values:SIGNATURE,ENCRYPTIONSIGNATURE: Key is used for signing (default)ENCRYPTION: Key is used for encryption
algorithm(string, optional): Algorithm to use with this key. Valid values:- For SIGNATURE:
EdDSA - For ENCRYPTION:
ECDH_ES,ECDH_ES_A128KW,ECDH_ES_A192KW,ECDH_ES_A256KW,ECDH_1PU,ECDH_1PU_A128KW,ECDH_1PU_A192KW,ECDH_1PU_A256KW
- For SIGNATURE:
keyIdType(string, optional): Method to generate the key ID (kid). Valid values:TIMESTAMP(default),SHA256,SHA1,ISO_DATE,NONEnotBeforeTime(string, optional): ISO 8601 date/time when the key becomes valid. If not provided, current time is usedexpirationTime(string, optional): ISO 8601 date/time when the key expires. If not provided, one year fromnotBeforeTimeis used
Request Body Fields
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | Yes | JWK name (unique identifier) |
| description | string | No | JWK description |
| type | string | Yes | JWK type: RSA, EC, OCT, OKP |
| rsa | object | Conditional | RSA-specific parameters (required if type is RSA) |
| ec | object | Conditional | EC-specific parameters (required if type is EC) |
| oct | object | Conditional | OCT-specific parameters (required if type is OCT) |
| okp | object | Conditional | OKP-specific parameters (required if type is OKP) |
RSA Object Fields
| Field | Type | Required | Description |
|---|---|---|---|
| keySize | integer | Yes | Key size in bits. Valid values: 2048, 3072, 4096 |
| keyUseType | string | No | Key usage type. Valid values: SIGNATURE, ENCRYPTION. Default: SIGNATURE |
| algorithm | string | No | Algorithm to use with this key. For SIGNATURE: RSA256, RSA384, RSA512, PS256, PS384, PS512. For ENCRYPTION: RSA1_5 (deprecated), RSA_OAEP (deprecated), RSA_OAEP_256, RSA_OAEP_384, RSA_OAEP_512 |
| keyIdType | string | No | Method to generate the key ID (kid). Valid values: TIMESTAMP (default), SHA256, SHA1, ISO_DATE, NONE |
| notBeforeTime | string | No | ISO 8601 date/time when the key becomes valid. If not provided, current time is used |
| expirationTime | string | No | ISO 8601 date/time when the key expires. If not provided, one year from notBeforeTime is used |
EC Object Fields
| Field | Type | Required | Description |
|---|---|---|---|
| curveType | string | Yes | Curve name. Valid values: P256, P384, P521, SECP256K1 |
| keyUseType | string | No | Key usage type. Valid values: SIGNATURE, ENCRYPTION. Default: SIGNATURE |
| algorithm | string | No | Algorithm to use with this key. For SIGNATURE: ES256, ES384, ES512, ES256K. For ENCRYPTION: ECDH_ES, ECDH_ES_A128KW, ECDH_ES_A192KW, ECDH_ES_A256KW, ECDH_1PU, ECDH_1PU_A128KW, ECDH_1PU_A192KW, ECDH_1PU_A256KW |
| keyIdType | string | No | Method to generate the key ID (kid). Valid values: TIMESTAMP (default), SHA256, SHA1, ISO_DATE, NONE |
| notBeforeTime | string | No | ISO 8601 date/time when the key becomes valid. If not provided, current time is used |
| expirationTime | string | No | ISO 8601 date/time when the key expires. If not provided, one year from notBeforeTime is used |
OCT Object Fields
| Field | Type | Required | Description |
|---|---|---|---|
| keySize | integer | Yes | Key size in bits. Valid values: 128, 192, 256 |
| keyUseType | string | No | Key usage type. Valid values: SIGNATURE, ENCRYPTION. Default: SIGNATURE |
| algorithm | string | No | Algorithm to use with this key. For SIGNATURE: HS256, HS384, HS512. For ENCRYPTION: A128KW, A192KW, A256KW, A128GCMKW, A192GCMKW, A256GCMKW, DIR, PBES2_HS256_A128KW, PBES2_HS384_A192KW, PBES2_HS512_A256KW |
| keyIdType | string | No | Method to generate the key ID (kid). Valid values: TIMESTAMP (default), SHA256, SHA1, ISO_DATE, NONE |
| passwordSaltLength | integer | No | Salt length for password-based encryption. Default: 8 |
| passwordIterationCount | integer | No | Iteration count for password-based encryption. Default: 1000 |
| notBeforeTime | string | No | ISO 8601 date/time when the key becomes valid. If not provided, current time is used |
| expirationTime | string | No | ISO 8601 date/time when the key expires. If not provided, one year from notBeforeTime is used |
OKP Object Fields
| Field | Type | Required | Description |
|---|---|---|---|
| curveType | string | Yes | Curve name. Valid values: ED25519, X25519 (Note: Ed448 and X448 are currently unsupported) |
| keyUseType | string | No | Key usage type. Valid values: SIGNATURE, ENCRYPTION. Default: SIGNATURE |
| algorithm | string | No | Algorithm to use with this key. For SIGNATURE: EdDSA. For ENCRYPTION: ECDH_ES, ECDH_ES_A128KW, ECDH_ES_A192KW, ECDH_ES_A256KW, ECDH_1PU, ECDH_1PU_A128KW, ECDH_1PU_A192KW, ECDH_1PU_A256KW |
| keyIdType | string | No | Method to generate the key ID (kid). Valid values: TIMESTAMP (default), SHA256, SHA1, ISO_DATE, NONE |
| notBeforeTime | string | No | ISO 8601 date/time when the key becomes valid. If not provided, current time is used |
| expirationTime | string | No | ISO 8601 date/time when the key expires. If not provided, one year from notBeforeTime is used |
Notes
namemust be unique within the projecttypedetermines the cryptographic algorithm and which type-specific object (rsa,ec,oct, orokp) must be provided- The key ID (
kid) is generated automatically with the method set inkeyIdTypeof the type object. It cannot be set in the request. The kid is used to identify the key in JWK Sets and JWT headers - Type-specific parameters are required based on the selected
type - JWK is automatically deployed to all environments after generation
Response
Success Response (200 OK)
{
"success": true,
"deploymentResult": {
"success": true,
"message": "Deployment completed successfully",
"environmentResults": [
{
"environmentName": "production",
"success": true,
"message": "Deployed successfully"
}
]
}
}
Error Response (400 Bad Request)
{
"status": "FAILURE",
"resultMessage": "JWK name can not be empty!"
}
or
{
"status": "FAILURE",
"resultMessage": "JWK type can not be empty!"
}
or
{
"status": "FAILURE",
"resultMessage": "JWK (name: generated-jwk) is already exist! Try update operation if want to change its value."
}
cURL Examples
Example 1: Generate RSA JWK (2048-bit)
curl -X POST \
"https://demo.apinizer.com/apiops/projects/MyProject/jwks/generate" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "generated-rsa-jwk",
"description": "Auto-generated RSA 2048-bit JWK",
"type": "RSA",
"rsa": {
"keySize": 2048
}
}'
Example 2: Generate RSA JWK (4096-bit)
curl -X POST \
"https://demo.apinizer.com/apiops/projects/MyProject/jwks/generate" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "generated-rsa-4096-jwk",
"description": "Auto-generated RSA 4096-bit JWK",
"type": "RSA",
"rsa": {
"keySize": 4096
}
}'
Example 3: Generate EC JWK (P-256)
curl -X POST \
"https://demo.apinizer.com/apiops/projects/MyProject/jwks/generate" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "generated-ec-jwk",
"description": "Auto-generated EC P-256 JWK",
"type": "EC",
"ec": {
"curveType": "P256"
}
}'
Example 4: Generate EC JWK (P-384)
curl -X POST \
"https://demo.apinizer.com/apiops/projects/MyProject/jwks/generate" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "generated-ec-p384-jwk",
"description": "Auto-generated EC P-384 JWK",
"type": "EC",
"ec": {
"curveType": "P384"
}
}'
Example 5: Generate OCT JWK (256-bit symmetric key)
curl -X POST \
"https://demo.apinizer.com/apiops/projects/MyProject/jwks/generate" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "generated-oct-jwk",
"description": "Auto-generated 256-bit symmetric key",
"type": "OCT",
"oct": {
"keySize": 256
}
}'
Example 6: Generate OKP JWK (Ed25519)
curl -X POST \
"https://demo.apinizer.com/apiops/projects/MyProject/jwks/generate" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "generated-okp-jwk",
"description": "Auto-generated Ed25519 JWK",
"type": "OKP",
"okp": {
"curveType": "ED25519"
}
}'
Example 7: Generate OKP JWK (X25519 for key exchange)
curl -X POST \
"https://demo.apinizer.com/apiops/projects/MyProject/jwks/generate" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "generated-x25519-jwk",
"description": "Auto-generated X25519 JWK for key exchange",
"type": "OKP",
"okp": {
"curveType": "X25519"
}
}'
Notes and Warnings
-
JWK Name:
- Must be unique within the project
-
JWK Types and Use Cases:
- RSA:
- Recommended for most use cases, supports signing and encryption
- Key sizes: 2048 (standard), 3072 (high security), 4096 (maximum security)
- Larger keys provide better security but slower operations
- Use for JWT signing (RS256, RS384, RS512) and encryption (RSA-OAEP)
- EC (Elliptic Curve):
- Smaller key sizes, good for constrained environments
- Curves: P-256 (256-bit), P-384 (384-bit), P-521 (521-bit)
- Use for JWT signing (ES256, ES384, ES512)
- More efficient than RSA for same security level
- OCT (Symmetric Key):
- Symmetric keys for encryption and signing
- Key sizes: 128, 192, 256 bits
- Use for JWT signing (HS256, HS384, HS512) and encryption (AES)
- Requires secure key distribution
- OKP (Octet Key Pair):
- Modern curve-based keys
- Ed25519/Ed448: For signing (EdDSA algorithm)
- X25519/X448: For key exchange (ECDH)
- Very efficient and secure
- Use for modern applications requiring high performance
- RSA:
-
Type-Specific Parameters:
- Each JWK type requires its corresponding parameter object (
rsa,ec,oct, orokp) - Parameters must match the selected
type - Invalid parameter combinations will result in validation errors
- Each JWK type requires its corresponding parameter object (
-
Automatic Deployment:
- JWK is automatically deployed after generation
- Deployment results are returned in the response
-
Security:
- Generated keys are cryptographically secure
- Private keys are encrypted at rest
- Key generation uses secure random number generators
-
Performance Considerations:
- RSA: Larger key sizes (4096) are slower but more secure
- EC: Faster than RSA for equivalent security
- OKP: Fastest option, ideal for high-performance scenarios
- OCT: Fastest for symmetric operations
Permissions
User must have SECRETS + MANAGE permission in the project. For deployment operations (when deploying JWKs to environments), user must also have SECRETS + DEPLOY_UNDEPLOY permission.
Related Documentation
- List JWKs - List all JWKs
- Create JWK - Create JWK from other sources
- Get JWK - Get a specific JWK