📄 Guide
Rules and targets (cardCARD / employee CUSTOMER) are bound many-to-many: a rule constrains nothing after creation and only takes effect once bound. Both bind and unbind are batch endpoints that address one rule and a batch of subjects: rule-level problems (missing / not ACTIVE / not owned by the company) reject the whole batch, while subject-level problems are item-independent with partial success — the response splits results into successTargets and failTargets, with per-item reasons in failTargets[].errorCode. Rule creation is covered in Creating velocity rules; the full code set is in the Error code dictionary.
Besides the
bind endpoint on this page, rules can also be bound at issue time through the ruleIds field of the card application (no more than 5) — see Applying for virtual cards. Whichever path you take, a single card or a single employee carries at most 5 rules.Batch bind
POST /open-api-corp/velocity/v1/bind
Request parameters
Response data
The endpoint returns noPer-itemsuccessCount/failCount: both equal the array lengths, and a second source of truth is avoided on purpose.
errorCode values for bind:
Request example
Response example
Batch-level error codes
Batch unbind
POST /open-api-corp/velocity/v1/unbind
Same shape as bind: one request addresses a single rule, items are processed independently, and one failure does not affect the rest.
Request parameters
The response has the same shape as bind (
successTargets / failTargets); per-item errorCode values for unbind:
Request example
Response example
Batch-level error codes
Listing a rule’s targets
GET /open-api-corp/velocity/v1/list-rule-targets — lists the cards and employees bound to a rule, paginated, newest binding first.
The response
data is a page: total / page / pageSize plus result[], each entry carrying subjectType (CARD / CUSTOMER), subjectId, and modifyTime (ISO-8601).
Returning an error instead of an empty page when the rule does not exist is deliberate: an empty page would be indistinguishable from “the rule exists but has no targets”. When you receive an empty
result, you can be sure the rule exists and simply has nothing bound to it yet.Listing the rules constraining a target
GET /open-api-corp/velocity/v1/list-target-rules — lists the rules constraining a card / employee, paginated.
The response
data is a page: total (the number of rules bound to this target) / page / pageSize plus result[], each entry carrying ruleId, ruleName, status (ACTIVE / INACTIVE), and modifyTime.
Next steps
- Query the merged quota and current usage once targets take effect: Quota query and adjustment
- How bound rules participate in authorization: Authorization and 3DS

