PHPackages                             ayctor/cityscan - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. ayctor/cityscan

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

ayctor/cityscan
===============

PHP client for CityScan. Allow you to activate or deactivate addresses.

1.1.2(3y ago)34.5k1MITPHPPHP &gt;=7.4

Since Jun 27Pushed 3y ago4 watchersCompare

[ Source](https://github.com/Ayctor/CityScan)[ Packagist](https://packagist.org/packages/ayctor/cityscan)[ RSS](/packages/ayctor-cityscan/feed)WikiDiscussions master Synced 2w ago

READMEChangelog (10)Dependencies (1)Versions (10)Used By (0)

CityScan addresses API
======================

[](#cityscan-addresses-api)

PHP client for CityScan. Allow you to activate or deactivate addresses.

Install
-------

[](#install)

```
composer require ayctor/cityscan
```

Instanciate
-----------

[](#instanciate)

Instanciate a new CityScan API with API key (required), client key (required for report) and an environment (optional), prod by default or preprod.

Be carefull, the function signature has changed with the client key added after api key.

```
$cs = new \CityScan\CityScan('api_key', 'client_key', 'preprod');
```

Errors
------

[](#errors)

Throws an exception on error. Error message is filled with the message returned by the API. If needed, the error code is also present.

Activate an address
-------------------

[](#activate-an-address)

### By road

[](#by-road)

```
function activateAddressByRoad($road, $postal_code, $city, $external_id = null){}

$address = $cs->activateAddressByRoad('23, rue sébastien mercier', 75015, 'Paris', 'ayctor');
```

Returns:

```
{
    "source": "IGN",
    "lat": 48.8445,
    "lon": 2.2786,
    "address": {
        "id": 74752,
        "geoloc_id": 69849,
        "route": "23, rue Sébastien Mercier",
        "postal_code": "75015",
        "city": "Paris"
    },
    "externalAddressId": "ayctor"
}
```

### By GPS

[](#by-gps)

```
function activateAddressByGPS($latitude, $longitude, $external_id = null){}

$address = $cs->activateAddressByGPS(48.8445, 2.2786);
```

Returns:

```
{
    "source": "IGN",
    "lat": "48.8445",
    "lon": "2.2786",
    "address": {
        "id": 74728,
        "geoloc_id": 69849,
        "route": "28 rue sebastien mercier",
        "postal_code": "75015",
        "city": "Paris"
    },
    "externalAddressId": null
}
```

Deactivate an address
---------------------

[](#deactivate-an-address)

```
function deactivateAddress($id, $isExternal = false)

$res_road = $cs->deactivateAddress('ayctor', true);

$res_gps = $cs->deactivateAddress(74728);
```

Returns:

```
{
    "deactivation": "true"
}
```

Reactivate addresses
--------------------

[](#reactivate-addresses)

```
function reactivateAddresses($ids, $isExternal = false){}

$cs->reactivateAddresses(['ayctor', 'digibox'], true);

$cs->reactivateAddresses(['ayctor', 'digibox'], true);

$cs->reactivateAddresses([74728, 74729]);
```

Returns:

```
{
  "status": 0,
  "content": {
    "addresses": [
      {
          "id": 74728,
          "route": "23, rue Sébastien Mericer",
          "postalCode": "75015",
          "city": "Paris",
          "externalAddressId": "ayctor",
          "active": true,
          "activation": "2020-01-03 18:42:47",
          "deactivation": null,
          "lastSeen": null,
          "lat": 48.8445,
          "lon": 2.2786
      },
      {
          "id": 74729,
          "route": "23, rue Sébastien Mericer",
          "postalCode": "75015",
          "city": "Paris",
          "externalAddressId": "digibox",
          "active": true,
          "activation": "2020-01-03 18:42:47",
          "deactivation": null,
          "lastSeen": null,
          "lat": 48.8445,
          "lon": 2.2786
      }
    ]
  }
}
```

Get adresses
------------

[](#get-adresses)

### Get active adresses

[](#get-active-adresses)

```
function getActives()

$adresses = $cs->getActives();
```

Returns:

```
{
  "status": 0,
  "content": {
    "count": 12,
    "addresses": [
      {
        "id": 68401,
        "route": "73 rue lecourbe",
        "postalCode": "75015",
        "city": "Paris",
        "externalAddressId": null,
        "active": true,
        "activation": "2019-01-02 09:43:48",
        "deactivation": null,
        "lat": 48.843331,
        "lon": 7.230364
      }, ...
    ]
  }
}
```

### Get all adresses

[](#get-all-adresses)

```
function getAll()

$adresses = $cs->getAll();
```

Returns:

```
{
  "status": 0,
  "content": {
    "count": 12,
    "addresses": [
      {
        "id": 68401,
        "route": "73 rue lecourbe",
        "postalCode": "75015",
        "city": "Paris",
        "externalAddressId": null,
        "active": true,
        "activation": "2019-01-02 09:43:48",
        "deactivation": null,
        "lat": 48.843331,
        "lon": 7.230364
      }, ...
    ]
  }
}
```

### Get activated

[](#get-activated)

Get the adresses activated between two dates. If null is sent for one of the dates, no limit is applied.

```
function getActivated($start = null, $end = null)

$adresses = $cs->getActivated('2018-01-01','2018-02-01');
```

Returns:

```
{
  "status": 0,
  "content": {
    "count": 12,
    "addresses": [
      {
        "id": 68401,
        "route": "73 rue lecourbe",
        "postalCode": "75015",
        "city": "Paris",
        "externalAddressId": null,
        "active": true,
        "activation": "2019-01-02 09:43:48",
        "deactivation": null,
        "lat": 48.843331,
        "lon": 7.230364
      }, ...
    ]
  }
}
```

### Get billed

[](#get-billed)

Get the adresses billed between two dates. If null is sent for one of the dates, no limit is applied.

```
function getActivated($start = null, $end = null)

$adresses = $cs->getActivated('2018-01-01','2018-02-01');
```

Returns:

```
{
  "status": 0,
  "content": {
    "count": 12,
    "addresses": [
      {
        "id": 68401,
        "route": "73 rue lecourbe",
        "postalCode": "75015",
        "city": "Paris",
        "externalAddressId": null,
        "active": true,
        "activation": "2019-01-02 09:43:48",
        "deactivation": null,
        "lat": 48.843331,
        "lon": 7.230364
      }, ...
    ]
  }
}
```

### Get deactivated

[](#get-deactivated)

Get the adresses deactivated between two dates. If null is sent for one of the dates, no limit is applied.

```
function getDeactivated($start = null, $end = null)

$adresses = $cs->getDeactivated('2018-01-01','2018-02-01');
```

Returns:

```
{
  "status": 0,
  "content": {
    "count": 12,
    "addresses": [
      {
        "id": 68401,
        "route": "73 rue lecourbe",
        "postalCode": "75015",
        "city": "Paris",
        "externalAddressId": null,
        "active": true,
        "activation": "2019-01-02 09:43:48",
        "deactivation": null,
        "lat": 48.843331,
        "lon": 7.230364
      }, ...
    ]
  }
}
```

Get report
----------

[](#get-report)

```
function report($id, $isExternal = false)

$report = $cs->report('ayctor', true);
```

Returns:

```
{
    "reportId": "51EA1BE0-6D13-1234-4E78-3A24BAEED2F0",
    "filename": "Rapport CityScan -  23 rue Sébastien Mercier - 75015 Paris.pdf"
}
```

###  Health Score

34

—

LowBetter than 75% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity21

Limited adoption so far

Community12

Small or concentrated contributor base

Maturity69

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~212 days

Recently: every ~367 days

Total

9

Last Release

1223d ago

Major Versions

0.2.0 → 1.0.02020-06-24

PHP version history (2 changes)1.0.0PHP ^7.4

1.1.2PHP &gt;=7.4

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/16002123?v=4)[jb veron](/maintainers/veronj)[@veronj](https://github.com/veronj)

![](https://avatars.githubusercontent.com/u/157569?v=4)[Erwan Guillon](/maintainers/erwanguillon)[@ErwanGuillon](https://github.com/ErwanGuillon)

![](https://avatars.githubusercontent.com/u/6543024?v=4)[Damien Couteillou](/maintainers/damien-couteillou)[@damien-couteillou](https://github.com/damien-couteillou)

---

Top Contributors

[![damien-couteillou](https://avatars.githubusercontent.com/u/6543024?v=4)](https://github.com/damien-couteillou "damien-couteillou (10 commits)")

### Embed Badge

![Health badge](/badges/ayctor-cityscan/health.svg)

```
[![Health](https://phpackages.com/badges/ayctor-cityscan/health.svg)](https://phpackages.com/packages/ayctor-cityscan)
```

###  Alternatives

[neuron-core/neuron-ai

The PHP Agentic Framework.

2.0k496.1k33](/packages/neuron-core-neuron-ai)[tencentcloud/tencentcloud-sdk-php

TencentCloudApi php sdk

3661.2M46](/packages/tencentcloud-tencentcloud-sdk-php)[civicrm/civicrm-core

Open source constituent relationship management for non-profits, NGOs and advocacy organizations.

751284.3k37](/packages/civicrm-civicrm-core)[roundcube/roundcubemail

The Roundcube Webmail suite

7.0k1.4k3](/packages/roundcube-roundcubemail)[spatie/laravel-export

Create a static site bundle from a Laravel app

672139.5k6](/packages/spatie-laravel-export)[nfse-nacional/nfse-php

This is my package nfse

1523.1k](/packages/nfse-nacional-nfse-php)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
