# `Daraja.B2B`
[🔗](https://github.com/okothkongo/daraja/blob/v0.1.1/lib/daraja/b2b.ex#L1)

Business to Business (B2B) payments.

Initiate transfers between organization shortcodes or till numbers.

## Example

    client = Daraja.Client.new()

    Daraja.B2B.request(client, %{
      initiator: "testapi",
      security_credential: "base64-credential",
      command_id: "BusinessPayBill",
      sender_identifier_type: 4,
      receiver_identifier_type: 4,
      amount: 10500,
      party_a: "600992",
      party_b: "600000",
      account_reference: "INV-001",
      remarks: "B2B Payment",
      queue_timeout_url: "https://example.com/b2b/timeout",
      result_url: "https://example.com/b2b/result"
    })

# `result`

```elixir
@type result() ::
  {:ok, Daraja.B2B.Response.Success.t()}
  | {:error, :invalid_request, list()}
  | {:error, :auth_failed, Daraja.APIError.t()}
  | {:error, :http_error, Daraja.APIError.t() | term()}
  | {:error, :request_failed,
     Daraja.B2B.Response.Error.t() | Daraja.APIError.t()}
```

# `request`

```elixir
@spec request(Daraja.Client.t(), map() | Daraja.B2B.PaymentRequest.t()) :: result()
```

Sends a B2B payment request.

Required params:
- `initiator`
- `security_credential` — pre-encrypted Base64 string or `{password, pem}` tuple (auto-encrypted)
- `command_id`
- `sender_identifier_type`
- `receiver_identifier_type`
- `amount`
- `party_a`
- `party_b`
- `remarks`
- `queue_timeout_url`
- `result_url`

Optional params:
- `account_reference`

---

*Consult [api-reference.md](api-reference.md) for complete listing*
