# SOAP Security API
> Compare WS-Policy and WS-SecurityPolicy assertions in caller-supplied WSDL 1.1 documents. No network calls are made.
Each POST has a fixed USDC price on Base, paid with the x402 exact scheme. The request is validated first, and payment settles only after a successful (2xx) result. Failed calls are not charged.
1. POST JSON matching the requestBody. Invalid input returns 400 with no payment challenge.
2. A valid unpaid call returns 402 with the exact amount and payTo.
3. Pay and retry with payment-signature. Payment settles only if the operation returns 2xx. A 4xx/5xx is not charged.
- Product: https://www.brainiac.software/api/soap-security
- Docs: https://www.brainiac.software/api/soap-security/docs
- OpenAPI: https://www.brainiac.software/api/soap-security/openapi.json
- Contact: support@brainiac.software (https://www.brainiac.software/contact)
## Operations
### POST /api/v1/soap-security/soap-security-policy-audit
$0.05 USDC. Compare WS-Policy and WS-SecurityPolicy assertions across caller-supplied WSDL 1.1 bindings and operations. audit_status is valid, warnings, policy_conflicts, invalid, or incomplete. risk_level is low, medium, high, or critical. A declared policy is not evidence that a server enforces it. Imports are not fetched.
Inputs: documents, expected?, selection?
Docs: https://www.brainiac.software/api/soap-security/docs#soap-security-soap-security-policy-audit
Example request:
```json
{
"documents": [
{
"name": "account.wsdl",
"role": "wsdl",
"content": "\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"
},
{
"name": "types.xsd",
"role": "xsd",
"content": ""
}
]
}
```
Example response:
```json
{
"audit_status": "policy_conflicts",
"risk_level": "critical",
"operation_security_profiles": [
{
"service": "AccountService",
"port": "AccountPort",
"binding": "AccountBinding",
"operation": "GetAccount",
"tokens": [
"x509"
],
"sign_body": true,
"encrypt_body": true,
"transport": false,
"timestamp": true,
"inherited": true,
"detail": "This profile is read from the supplied policy documents. It was not checked against a running server."
},
{
"service": "AccountService",
"port": "AccountPort",
"binding": "AccountBinding",
"operation": "ResetPassword",
"tokens": [
"username"
],
"sign_body": false,
"encrypt_body": false,
"transport": false,
"timestamp": false,
"inherited": false,
"detail": "This profile is read from the supplied policy documents. It was not checked against a running server."
}
],
"policy_conflicts": [
{
"binding": "AccountBinding",
"operation": "ResetPassword",
"code": "weaker_operation",
"detail": "ResetPassword requires less than the outer policy for AccountBinding: sign_body, encrypt_body, timestamp, token:x509. This compares the supplied documents only."
},
{
"binding": "AccountBinding",
"operation": "GetAccount",
"code": "token_inconsistent",
"detail": "AccountBinding: The operations on this binding do not require the same tokens. This is a document comparison, not a runtime result."
},
{
"binding": "AccountBinding",
"operation": "GetAccount",
"code": "sign_inconsistent",
"detail": "AccountBinding: The operations on this binding do not sign the body in the same way. This is a document comparison, not a runtime result."
},
{
"binding": "AccountBinding",
"operation": "GetAccount",
"code": "encrypt_inconsistent",
"detail": "AccountBinding: The operations on this binding do not encrypt the body in the same way. This is a document comparison, not a runtime result."
}
],
"missing_requirements": [
{
"binding": "AccountBinding",
"operation": "ResetPassword",
"requirement": "sign_body",
"detail": "ResetPassword does not repeat the outer sign_body requirement."
},
{
"binding": "AccountBinding",
"operation": "ResetPassword",
"requirement": "encrypt_body",
"detail": "ResetPassword does not repeat the outer encrypt_body requirement."
},
{
"binding": "AccountBinding",
"operation": "ResetPassword",
"requirement": "timestamp",
"detail": "ResetPassword does not repeat the outer timestamp requirement."
},
{
"binding": "AccountBinding",
"operation": "ResetPassword",
"requirement": "token:x509",
"detail": "ResetPassword does not repeat the outer token:x509 requirement."
}
],
"unsupported_assertions": [
{
"document": "account.wsdl",
"name": "WeirdToken",
"detail": "WeirdToken is not an implemented WS-SecurityPolicy assertion. It was not treated as protection."
}
],
"unresolved_references": [
{
"document": "account.wsdl",
"reference": "#MissingPolicy",
"detail": "This policy reference is not in the supplied documents. It was not fetched."
}
],
"findings": [
{
"code": "weaker_operation",
"severity": "critical",
"document": "account.wsdl",
"binding": "AccountBinding",
"operation": "ResetPassword",
"detail": "ResetPassword requires less than the outer policy for AccountBinding: sign_body, encrypt_body, timestamp, token:x509. This compares the supplied documents only."
},
{
"code": "token_inconsistent",
"severity": "high",
"document": "account.wsdl",
"binding": "AccountBinding",
"operation": "GetAccount",
"detail": "AccountBinding: The operations on this binding do not require the same tokens. This is a document comparison, not a runtime result."
},
{
"code": "sign_inconsistent",
"severity": "high",
"document": "account.wsdl",
"binding": "AccountBinding",
"operation": "GetAccount",
"detail": "AccountBinding: The operations on this binding do not sign the body in the same way. This is a document comparison, not a runtime result."
},
{
"code": "encrypt_inconsistent",
"severity": "high",
"document": "account.wsdl",
"binding": "AccountBinding",
"operation": "GetAccount",
"detail": "AccountBinding: The operations on this binding do not encrypt the body in the same way. This is a document comparison, not a runtime result."
},
{
"code": "policy_unresolved",
"severity": "medium",
"document": "account.wsdl",
"detail": "Policy reference #MissingPolicy is not in the supplied documents. It was not fetched."
},
{
"code": "assertion_unsupported",
"severity": "medium",
"document": "account.wsdl",
"detail": "WeirdToken is not an implemented WS-SecurityPolicy assertion. It was not treated as protection."
},
{
"code": "declared_only",
"severity": "low",
"detail": "These documents were supplied in the request. They were not fetched, and a declared policy is not evidence that a server enforces it."
}
],
"limitations": [
"Documents are the XML strings in the request. Imports and policy references were not fetched.",
"A declared policy is not evidence that a running SOAP server enforces it.",
"Certificates and credentials are not validated.",
"Implemented policy namespaces are WS-Policy 1.2 and 1.5, and WS-SecurityPolicy 1.2 and 1.3. Other assertions are reported and are not treated as protection.",
"An operation with no attached policy inherits the nearest service, port, or binding policy. A policy with no security assertions is explicit, not missing.",
"Only WSDL 1.1 is read."
]
}
```
### POST /api/v1/soap-security/policy-strength
$0.04 USDC. Score a caller-supplied algorithm suite, body signature, body encryption, timestamp, and token kind. Basic256Sha256 contributes the most, TripleDes and None the least. A username token scores below an X.509 token. The grade follows that score. No certificate is validated and no policy file is fetched.
Inputs: algorithm_suite, body_signed, body_encrypted, timestamp, token
Docs: https://www.brainiac.software/api/soap-security/docs#soap-security-policy-strength
Example request:
```json
{
"algorithm_suite": "Basic128",
"body_signed": true,
"body_encrypted": false,
"timestamp": true,
"token": "username"
}
```
Example response:
```json
{
"security_policy_grade": "D",
"cryptographic_strength_score": 50
}
```