Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
- [Entity onboardings](#entity-onboardings)
- [Links](#links)
- [Payouts](#payouts)
- [Organizations](#organizations)
- [Payment methods](#payment-methods)
- [Transfer batches](#transfer-batches)
- [Webhook Signature Validation](#webhook-signature-validation)
Expand Down Expand Up @@ -307,6 +308,25 @@ charges = client.payouts.resources.list(
)
```

#### Organizations

Partnerships can create an organization for a company they refer. This endpoint only
supports `live` mode and requires the [JWS Signature](#generate-the-jws-signature):

```python
organization = client.organizations.create(
name="Empresa SpA",
tax_id="111111111",
founder_email="founder@example.com",
products={
"business_accounts": {
"company_basics": {"incorporation_type": "one_day_company"},
},
},
external_reference="SOL-123",
)
```

#### Payment methods

Mexican direct debit mandates are created with a `multipart/form-data` request, so the
Expand Down
2 changes: 2 additions & 0 deletions fintoc/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
InvoicesManager,
LinkIntentsManager,
LinksManager,
OrganizationsManager,
PaymentIntentsManager,
PaymentLinksManager,
PayoutsManager,
Expand Down Expand Up @@ -84,6 +85,7 @@ def __init__(self, api_key, api_version=None, jws_private_key=None):
self.link_intents = LinkIntentsManager("/v1/link_intents", self._client)
self.payouts = PayoutsManager("/v1/payouts", self._client)
self.tax_statements = TaxStatementsManager("/v1/tax_statements", self._client)
self.organizations = OrganizationsManager("/v1/organizations", self._client)

self.v2 = _FintocV2(self._client)

Expand Down
1 change: 1 addition & 0 deletions fintoc/managers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from .link_intents_manager import LinkIntentsManager
from .links_manager import LinksManager
from .movements_manager import MovementsManager
from .organizations_manager import OrganizationsManager
from .payment_intents_manager import PaymentIntentsManager
from .payment_links_manager import PaymentLinksManager
from .payout_resources_manager import PayoutResourcesManager
Expand Down
11 changes: 11 additions & 0 deletions fintoc/managers/organizations_manager.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
"""Module to hold the organizations manager."""

from fintoc.mixins import ManagerMixin


class OrganizationsManager(ManagerMixin):

"""Represents an organizations manager."""

resource = "organization"
methods = ["create"]
1 change: 1 addition & 0 deletions fintoc/resources/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from .link import Link
from .link_intent import LinkIntent
from .movement import Movement
from .organization import Organization
from .other_taxes import OtherTaxes
from .payment_intent import PaymentIntent
from .payment_link import PaymentLink
Expand Down
7 changes: 7 additions & 0 deletions fintoc/resources/organization.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
"""Module to hold the Organization resource."""

from fintoc.mixins import ResourceMixin


class Organization(ResourceMixin):
"""Represents a Fintoc Organization."""
38 changes: 38 additions & 0 deletions tests/test_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
LinkIntent,
MandateDocument,
Onboarding,
Organization,
PaymentEligibility,
PaymentIntent,
PaymentMethod,
Expand Down Expand Up @@ -1720,6 +1721,43 @@ def test_payout_get(self):
assert payout.method == "get"
assert payout.url == f"v1/payouts/{payout_id}"

def test_organization_create(self):
"""Test creating a referred organization."""
organization_data = {
"name": "Empresa SpA",
"tax_id": "111111111",
"founder_email": "founder@example.com",
"products": {
"business_accounts": {
"company_basics": {"incorporation_type": "one_day_company"},
"shareholders": [
{"type": "natural_person", "name": "Test", "percentage": 60}
],
}
},
"external_reference": "SOL-123",
"metadata": {"request_id": "abc"},
}

organization = self.fintoc.organizations.create(**organization_data)

assert isinstance(organization, Organization)
assert organization.method == "post"
assert organization.url == "v1/organizations"
assert organization.json.name == organization_data["name"]
assert organization.json.tax_id == organization_data["tax_id"]
assert organization.json.founder_email == organization_data["founder_email"]
business_accounts = organization.json.products.business_accounts
assert business_accounts.company_basics.incorporation_type == (
"one_day_company"
)
assert business_accounts.shareholders[0].percentage == 60

def test_organizations_only_support_create(self):
"""Test that organizations only expose the create operation."""
with pytest.raises(AttributeError):
self.fintoc.organizations.list()

@pytest.mark.parametrize(
"resource_type,klass",
[
Expand Down
Loading